核心数据:重启时订购的To-Many关系

时间:2010-08-02 16:42:16

标签: objective-c cocoa core-data nstableview

当我以多对多关系重新启动Core Data应用程序时,我的数据(在NSTableView中显示)是随机顺序。在退出应用程序之前,如何按用户离开的顺序保留它?

当然,我可以在awakeFromNib中对数据进行排序,但这并没有给出用户用于排列数据的准确顺序(例如,他可能会手动重新排列行数)。

我的文档的详细信息:我所拥有的是与NSArrayController管理的实体“Card”的多对多关系中的实体“关系”。 Card有2个属性,“number”(int)和“name”(String)通过NSTableView的两列中的Bindings显示。通过单击表头来完成排序。

如何保留排序顺序?

1 个答案:

答案 0 :(得分:10)

核心数据不支持有序集合(如NSArray)。这是为了支持诸如仅提取一小部分信息而不拉入整个商店的事情。这就是为什么结果总是在NSSet(无序集合)中给出的原因。

保留任何排序顺序的唯一方法是向实体添加属性,如“sortOrder”,并确保将其设置为有效的。然后,您可以将数组控制器的排序描述符设置为按sortOrder进行升序排序。同样,如果您使用NSFetchRequest手动提取,也可以设置其排序描述符。

Lion的更新(10.7)

如果您的应用程序中的目标是10.7及更高版本,NSManagedObject now gives you ordered relationships.使用-mutableOrderedSetValueForKey:和-mutableOrderedSetValueForKey:来设置和检索NSOrderedSets。耶!