Objective c 核心数据中的索引关系

Objective c 核心数据中的索引关系,objective-c,cocoa-touch,Objective C,Cocoa Touch,我刚开始在iphonesdk上使用核心数据,我正在研究保存一个有序列表,类似于数组。然而,核心数据中的关系在检索时表示为集合。这使得保存对象的定位顺序变得困难 一个很好的例子是当允许对项进行重新排序时,表视图中的数据项。一个简单的解决方案是在托管对象上包含索引属性 考虑以下层次结构: 文档数据项 不同的文档实例可以链接到同一个数据项,每个文档可能引用一个或多个数据项。因此,在DataItem中具有index属性将导致该实例的可重用性降低,即,您只能为文档的一个实例保存索引 如何在表视图中整齐有序

我刚开始在iphonesdk上使用核心数据,我正在研究保存一个有序列表,类似于数组。然而,核心数据中的关系在检索时表示为集合。这使得保存对象的定位顺序变得困难

一个很好的例子是当允许对项进行重新排序时,表视图中的数据项。一个简单的解决方案是在托管对象上包含索引属性

考虑以下层次结构:

文档数据项

不同的文档实例可以链接到同一个数据项,每个文档可能引用一个或多个数据项。因此,在DataItem中具有index属性将导致该实例的可重用性降低,即,您只能为文档的一个实例保存索引


如何在表视图中整齐有序地呈现层次结构,但仍然保持每个DataItem实例的可重用性?谢谢

一个好的解决方案是在文档中保留一个单独的数据结构,以便将数据项映射到表视图中的某个位置。除了允许同一数据项存在于多个位置之外,如果您需要将一个数据项添加到多个文档中,此解决方案也将起作用


当我研究保持核心数据对象有序的不同策略时,我发现了一个非常详细的方法,包括示例代码。

您可以使用另一个实体来实现,如下所示:

文档可以通过以下方式找到其实际数据项:

NSSet * documentDataItems = [[document orderedDataItems] valueForKey:@"dataItem"];
同样,DataItem也可以通过以下操作找到其所有文档:

NSSet * dataItemDocuments = [[dataItem orderedPositions] valueForKey:@"document"];
从OSXLion(10.7)开始,这一点现在更加直截了当了。Cocoa现在支持与核心数据兼容的新类。此功能在iOS中也可用,但需要iOS 5.0或更高版本。这意味着,如果您希望您的应用程序向后兼容iOS或OS X的早期版本,则无法使用此选项


要获得排序,只需打开核心数据模型编辑器,选择多对多关系并选中“排序”复选框。

@BJ Homer-谢谢;显然twitpic不喜欢静态链接。我把它上传到了MobileMe。你知道关于这个新API的任何文档吗?我只在发行说明中看到过正式讨论。例如,我想了解一下在表视图中按此顺序显示记录的情况。在我的原始答案中,有一个链接指向Orderset的类引用。但是,我不知道在表视图中有任何与最佳用例相关的特定内容。
sensorderedset
当前也不能与iCloud一起使用。我一定缺少一些内容,因为我找不到如何为访问属性时将获得的
sensorderedset
指定排序描述符。当然,您可以使用带有排序描述符的单独获取请求,但ordered属性的意义是什么?