NSOrderedSet不会建立由XCode中产生的iPhone类(NSOrderedSet won

2019-09-26 05:33发布

我创建了一个简单的数据模型,在XCode的4.1狮子1一对多的关系。

类型为这种关系产生的属性的是NSOrderedSet,从而未能编译,因为类型是未知的。

我搜索的文档来了解,这是一种新的添加为Mac OS 10.7(狮子),在管理对象特别有用的集合类(我只是习惯了苹果的工作方式:一些基本的集合类型语言绑定到OS版本...有趣)

这是有意义的,NdOrderedSet是显然的NSSet中和的NSArray的特征的组合 - 也就是,它有一个索引顺序等的阵列,具有独特的等一组的每个元素。 尼斯。 不过,我的问题是:

  1. 为什么不把它编译?
  2. 为什么产生的XCode的东西,不会编译?

    我要采取的赃物在#1自己:我的SDK是的iOS 4.3,其中早狮(而不是的Mac OS,但iOS版),只是没有这个新的集合类。 好了,够公平,但#2代表:为什么的XCode生成它给我吗? 为什么不检测我的SDK,并产生一些作品? 为什么不给我一个选择?

    这使我对#3,#4

  3. 有什么解决办法? 我应该将其更改为的NSSet或NSArray的? XCode中是如何产生4.0之前这些事情?

  4. 如果我是用NSOrderedSet(即让它以某种方式工作)这将是向后兼容以前的iOS版本兼容?

Answer 1:

核心数据下令关系只在iOS 5中,没有的iOS 4.3提供。 你需要的iOS 5 SDK这是只有在Xcode的4.2可用。 在Xcode 4.1切换到4.2 Xcode中,你应该罚款。

3:解决方法是使用的Xcode 4.2和定位到iOS应用5.如果您仍然想定位到iOS 4.x和已订购的关系,请继续阅读。

4:你是不太可能能够得到NSOrderedSet到的iOS 4.3的工作。 该类简单地从可可触摸遗漏。 所以,你需要从头开始,这是绝对可行的reeimplement它。 什么是不可行的,是为了再拿到核心数据使用它。 就这样算了吧。

现在,它可能是值得一提,它可以定义与“老”核心数据有序关系。 它需要更多的工作,但它肯定是可行的。 下面是一个例子:

想象一下, MealCourse实体。 一顿饭有课程的有序关系,在用餐时课程,拿出特定的顺序。 你不想主菜之前吃你的甜点!

我们的想法是定义一个代表在用餐过程中的成员第三帮手实体。 让我们把这个实体CourseInMeal 。 现在建立以下关系:

Course <--------->> CourseInMeal <<----------> Meal

凡双箭头表示关系的“一对多”结束。

这些关系基本上说,一个疗程即可出现在几顿饭,而且一顿饭可以有几门课程。

剩下的唯一,这是代表有序关系。 要做到这一点,只是一个属性添加到CourseInMeal实体,也许称为position

现在,当你要定义一个新用餐时创建的新实例CourseInMeal在餐每门课程,喜欢的东西:

CourseInMeal *newMealMembership = [CourseInMeal insertInManagedObjectContext:self.moc];
newMealMembership.course = myDessert;
newMealMembership.meal = myBirthdayMeal;
newMealMembership.position = 3; // or whatever
[self.moc save:NULL];

瞧,你在普通的旧核心数据的有序关系。



Answer 2:

我只是尝试了一下。 矿井出来作为一个NSSet ,不NSOrderedSet

也许你应该检查你的项目设置,特别是标题架构下的项目。 (选择项目,构建设置, 架构基础SDK,以及支持的平台)。



文章来源: NSOrderedSet wont build in iPhone class generated by XCode