iOS:核心数据:如何在托管对象中保留一组有序的对象
Posted
技术标签:
【中文标题】iOS:核心数据:如何在托管对象中保留一组有序的对象【英文标题】:iOS : Core Data: How to retain an ordered set of objects in a managed object 【发布时间】:2011-03-11 22:10:16 【问题描述】:我的 ios 应用中有一个 NSManagedObject。该对象称为圆形。在回合中,我与一堆 Person 对象有一对多的关系。
xCode 使用 NSSet 作为我与 Person 托管对象的一对多关系的数据类型来生成我的托管对象类。
所以我的 Round 托管对象看起来像这样:
@interface Round : NSManagedObject
@property (nonatomic, retain) NSSet* people;
@end
然而 NSSet 不是一个有序集合,我想保留一个 NSArray 的顺序,我用它来保存这些 Person 对象,因为我将它分配给我的 Round 托管对象。
我尝试将我的 NSArray 转换为 NSSet,但未保留该集合的原始顺序。
我尝试在我的 Round 托管对象中将类型从 NSSet 更改为 NSArray,但在运行时出现以下错误。
2011-03-11 14:00:06.950 SkeetTracker[42782:207] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:**“不可接受的多对关系值类型:属性 =”人们”;所需类型 = NSSet;给定类型 = __NSArrayM;** 值 = ( " (实体: 人; id: 0x5bed0c0 ; 数据: \n firstName = Todd;\n lastName = McFarlane;\n round = \"0x5bf2cb0 \";\n scores = \"\";\n)",
有没有人遇到过这样的事情并知道解决办法?
亲切的问候, 乔治
【问题讨论】:
【参考方案1】:我相信 iOS 5 实际上已经内置了它 - 但无论如何,如果您想要 持久 排序顺序,您需要有一个可以创建 NSSortDescription
的存储属性。然后再添加一个返回 [NSSet sortedArrayUsingDescriptors:self.unsortedSetMethod]
数组的方法(我更喜欢只读属性,因此我也可以点访问它)。
【讨论】:
【参考方案2】:这是一件复杂的事情,我希望 Apple 能够内置它。但既然他们没有,你必须使用一种解决方法。我通常做的是使用未定义类型的瞬态属性,并为数组中的元素添加索引属性。加载数据时,使用按索引排序的对象创建一个数组,它是瞬态属性。保存上下文后,您将遍历数组并确保每个对象都有正确的索引。或者,如果更改很少,您可以在更改数组时更改索引。
【讨论】:
【参考方案3】:感谢您的好主意。我认为在我的情况下,我可以将“索引”属性添加到我的数组元素(它们也是托管对象)并使索引成为瞬态属性。
我有点不清楚为什么需要创建额外的瞬态数组属性。
【讨论】:
以上是关于iOS:核心数据:如何在托管对象中保留一组有序的对象的主要内容,如果未能解决你的问题,请参考以下文章