2013-03-12 67 views
0

这似乎非常微不足道,我不应该问,但我没有看到它有任何东西。如果我将一组对象(或“set”)保存到CoreData中,为什么它总是将其按顺序返回?没有特定的顺序给每个数组(用户列表),所以我不相信会有任何正则表达式或排序描述符。CoreData抓取错误

回答

2

为了让用户定义的排序,你可以在你的数据模型添加一个整数属性(例如“中将sortOrder”)到相应的实体。您可以使用此属性通过在用户更改列表中的顺序时更新管理对象中的属性来手动跟踪排序顺序。然后,您将能够执行提取请求,并根据“sortOrder”属性指定排序描述符,以按原始用户定义顺序获取从提取中返回的结果。

如果您使用的是iOS 5或10.7以上版本,则可以创建您的模型,使其具有有序的多对多关系。请参阅iOS 5.0/OS X 10.7 release notes。在界面生成器中,选择相关关系并检查“已排序”复选框。

+0

为什么要使用'sortOrder'属性,并且只是在执行提取请求时需要排序? – 2013-03-12 04:03:47

+0

原始海报表示数据没有顺序(例如,它不按时间顺序排列,不按字母顺序等),因为用户在添加和重新排列项目时定义了列表的顺序。添加sortOrder属性允许将订单保存在模型中,然后在用户通过表视图或其他方式操纵订单时保持最新状态。然后可以在NSSortDescriptor中使用sortOrder属性来按照用户先前设置的相同顺序对项目进行排序。 – Andrew 2013-03-12 06:15:22

+0

@安德鲁感谢您的帮助。我希望我不会诉诸添加排序属性到所有我的数据库实体,但我想这是唯一的方法:( – random 2013-03-12 17:45:03

2

NSSet没有保证的顺序。您需要NSArray才能找到特定元素或控制返回集的顺序。

+0

它在[docs](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html)中非常清楚。排序描述符在这种情况下非常常见。 – 2013-03-12 02:25:32

+0

这是在文档中指出,但没有描述符来排序是问题。安德鲁的答案就是我要做的。 – random 2013-03-12 17:44:20