我创建了一个简单的数据模型,在XCode的4.1狮子1一对多的关系。
类型为这种关系产生的属性的是NSOrderedSet,从而未能编译,因为类型是未知的。
我搜索的文档来了解,这是一种新的添加为Mac OS 10.7(狮子),在管理对象特别有用的集合类(我只是习惯了苹果的工作方式:一些基本的集合类型语言绑定到OS版本...有趣)
这是有意义的,NdOrderedSet是显然的NSSet中和的NSArray的特征的组合 - 也就是,它有一个索引顺序等的阵列,具有独特的等一组的每个元素。 尼斯。 不过,我的问题是:
- 为什么不把它编译?
为什么产生的XCode的东西,不会编译?
我要采取的赃物在#1自己:我的SDK是的iOS 4.3,其中早狮(而不是的Mac OS,但iOS版),只是没有这个新的集合类。 好了,够公平,但#2代表:为什么的XCode生成它给我吗? 为什么不检测我的SDK,并产生一些作品? 为什么不给我一个选择?
这使我对#3,#4
有什么解决办法? 我应该将其更改为的NSSet或NSArray的? XCode中是如何产生4.0之前这些事情?
如果我是用NSOrderedSet(即让它以某种方式工作)这将是向后兼容以前的iOS版本兼容?
核心数据下令关系只在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它。 什么是不可行的,是为了再拿到核心数据使用它。 就这样算了吧。
现在,它可能是值得一提,它可以定义与“老”核心数据有序关系。 它需要更多的工作,但它肯定是可行的。 下面是一个例子:
想象一下, Meal
和Course
实体。 一顿饭有课程的有序关系,在用餐时课程,拿出特定的顺序。 你不想主菜之前吃你的甜点!
我们的想法是定义一个代表在用餐过程中的成员第三帮手实体。 让我们把这个实体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];
瞧,你在普通的旧核心数据的有序关系。
我只是尝试了一下。 矿井出来作为一个NSSet
,不NSOrderedSet
。
也许你应该检查你的项目设置,特别是标题架构下的项目。 (选择项目,构建设置, 架构和基础SDK,以及支持的平台)。