2010-08-02 52 views
4

当我使用多对多关系重新启动核心数据应用程序时,我的数据(在NSTableView中呈现)以随机顺序排列。如何在退出应用程序之前按照用户离开的顺序保留它?核心数据:重新启动时订购的多对多关系

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

我的文档的细节:我有一个实体“关系”与实体“卡”之间的多对多关系,这两个关系都由NSArrayController管理。 Card有2个属性,通过Bindings在NSTableView的两列中显示“number”(int)和“name”(String)。排序是通过点击表头完成的。

如何保存排序顺序?

回答

10

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

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

更新狮子(10.7)

如果您的目标是你的应用程序10.7及以上,NSManagedObject now gives you ordered relationships.使用-mutableOrderedSetValueForKey:和-mutableOrderedSetValueForKey:设置和检索NSOrderedSets。好极了!

+0

有没有关于如何实际使用NSOrderedSet的例子?在NSTableView或NSOutlineView中说? – Tony 2011-12-20 01:27:07

+1

基于发行说明(http://developer.apple.com/library/mac/#releasenotes/DataManagement/RN-CoreData/_index.html)我认为基本上所有的绑定排序和拖放更改直接影响使用NSOrderedSet时的顺序。这就是它的全部内容:改变集合中对象的顺序并保持不变。 – 2011-12-20 02:11:20