NSOrderedSet不会在XCode生成的iPhone类中生成

我在Lion上的XCode 4.1中创build了一个具有一对多关系的简单数据模型。

为此关系生成的属性的types是NSOrderedSet,由于types未知,所以无法编译。

我search了文档,了解到这是为Mac OS 10.7(Lion)添加的一种新的集合类,特别适用于托pipe对象(我只是习惯了苹果的工作方式:像集合types一样基本该语言是绑定到一个操作系统发布…有趣的)

这是有道理的,NdOrderedSet显然是NSSet和NSArray的特性的组合 – 也就是说,它有一个像数组一样的索引顺序,每个元素都像一个集合一样独特。 尼斯。 但是,我的问题是:

  1. 为什么不编译?
  2. 为什么XCode生成不能编译的东西?

    我将自己在第一名:我的SDK是iOS 4.3,它早于狮子(而不是Mac OS,但iOS),并没有这个新的集合类。 好,够公平的,但是#2代表:为什么XCode为我生成它? 为什么不检测我的SDK并生成一些有用的东西? 为什么不给我一个select?

    这使我到#3和#4

  3. 什么是解决方法? 我应该将其更改为NSSet或NSArray? XCode在4.0之前如何生成这些东西?

  4. 如果我使用NSOrderedSet(即让它工作),它是否会向前兼容以前的iOS版本?

核心数据有序关系仅适用于iOS 5,不适用于iOS 4.3。 您需要仅在Xcode 4.2上可用的iOS 5 SDK。 从Xcode 4.1切换到Xcode 4.2,你应该没问题。

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

4:你不可能让NSOrderedSet在iOS 4.3中工作。 这个class只是从cocoa触摸丢失。 所以你需要从零开始重新实现,这绝对是可行的。 不可行的是,然后让Core Data来使用它。 所以忘了它。

现在,值得一提的是,可以用“旧”核心数据来定义有序的关系。 这需要更多的工作,但是绝对是可行的。 这里是一个例子:

试想一Meal和一个Course实体。 一餐与课程有一种有序的关系,因为一顿饭中的课程按照特定的顺序出现。 主菜之前你不想吃甜点!

这个想法是定义一个代表餐饮课程成员的第三个帮手实体。 我们称之为CourseInMeal实体。 现在build立以下关系:

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

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

这些关系基本上说,一门课程可以在几餐中出现,一顿饭可以有几门课程。

唯一剩下的就是代表有序的关系。 为此,只需将一个属性添加到CourseInMeal实体中,也许称为position

现在,当你想要定义一顿新餐时,你可以为每顿饭中的每道菜创build一个新的CourseInMeal实例,例如:

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

Voilà,在简单的旧Core Data中有一个有序的关系。

我刚刚试了一下。 我的出现是一个NSSet ,而不是NSOrderedSet

也许你应该检查你的项目设置,特别是标题下的项目。 (select项目,构build设置, 体系结构基础SDK以及支持的平台)。