核心数据:重启时排序的一对多关系

Posted

技术标签:

【中文标题】核心数据:重启时排序的一对多关系【英文标题】:Core Data: To-Many Relationship ordered upon restart 【发布时间】:2010-08-02 16:42:15 【问题描述】:

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

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

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

如何保留排序顺序?

【问题讨论】:

【参考方案1】:

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

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

Lion (10.7) 更新

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

【讨论】:

有没有关于如何实际使用 NSOrderedSet 的示例?在 NSTableView 或 NSOutlineView 中说? 基于发行说明 (developer.apple.com/library/mac/#releasenotes/DataManagement/…) 我认为基本上所有的绑定排序和拖放更改都会直接影响使用 NSOrderedSet 时的顺序。这就是它的全部内容:更改集合中对象的顺序并且它仍然存在。

以上是关于核心数据:重启时排序的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:在一对多关系中按日期属性排序

用于核心数据一对多关系的 NSSortDescriptor

核心数据:NSPredicate 一对多对多关系

使用核心数据,当一对多关系低于最小计数时,是一种自动删除实体的方法吗?

快速获取具有一对多关系的核心数据

使用核心数据在 ios 中建立一对多关系