繁体   English   中英

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

[英]NSOrderedSet wont build in iPhone class generated by XCode

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

为此关系生成的属性的类型为NSOrderedSet,由于类型未知,因此无法编译。

我搜索了文档,以了解这是为Mac OS 10.7(Lion)添加的一种新的收集类,在托管对象中特别有用(我刚刚习惯了Apple的工作方式:这与收集类型一样基本该语言绑定到OS版本...很有趣)

这很有道理,NdOrderedSet显然是NSSet和NSArray的功能的组合-也就是说,它具有像数组一样的索引顺序,每个元素都像一组一样唯一。 尼斯。 但是,我的问题是:

  1. 为什么不编译?
  2. 为什么XCode生成无法编译的内容?

    我本人将对#1感到困惑:我的SDK是iOS 4.3,它早于Lion(不是Mac OS,而是iOS),并且根本没有这个新的集合类。 好的,足够公平,但是#2站起来了:为什么XCode为我生成了它? 为什么不检测我的SDK并生成有效的东西? 为什么不给我一个选择呢?

    这使我进入了#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并定位到iOS5。如果您仍然想定位到iOS 4.x,并具有有序的关系,请继续阅读。

4:您不太可能让NSOrderedSet在iOS 4.3中运行。 可可触摸完全缺少该课程。 因此,您需要从头开始重新实现它,这绝对是可行的。 什么是不可行的,是为了再拿到核心数据使用它。 所以算了

现在,值得一提的是,可以使用“旧” Core Data定义有序关系。 它需要更多的工作,但是绝对是可行的。 这是一个例子:

想象一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];

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

我只是尝试了一下。 我的不是NSOrderedSet NSSet

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM