核心数据中的索引关系

Mat*_*hew 7 cocoa-touch objective-c

我刚刚开始在iPhone SDK上使用Core Data,我正在寻找保存有序列表,类似于数组.但是,核心数据中的关系在检索时表示为集合.这使得难以保存对象的定位顺序.

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

考虑以下层次结构:

文档<-Many-to-many-> DataItem

不同的Document实例可以链接到同一个DataItem,每个Document可能引用一个或多个DataItem.因此,在DataItem中使用索引属性会导致该实例的可重用性降低,即您只能保存一个Document实例的索引.

关于如何在表视图中整齐地排列层次结构但是仍然保持每个DataItem实例可重用的任何想法?谢谢!

Ben*_*ell 15

从OS X Lion(10.7)开始,现在更直接了.Cocoa现在支持与Core Data兼容的新NSOrderedSet类.此功能在iOS中也可用,但需要iOS 5.0或更高版本.这意味着如果您希望应用程序向后兼容早期版本的iOS或OS X,则无法使用此功能.

要获得订购,您只需打开Core Data模型编辑器,选择多对多关系并选中"已订购"复选框.


Dav*_*ong 7

您可以使用其他实体来执行此操作,例如: alt text http://gallery.me.com/davedelong/100084/Screenshot-20on-202009-07-04-20at-2010-34-56-20AM/web.jpg ?版本= 12467253090001

Document可以通过使用以下内容找到它的实际dataItem:

NSSet * documentDataItems = [[document orderedDataItems] valueForKey:@"dataItem"];
Run Code Online (Sandbox Code Playgroud)

同样,DataItem可以通过执行相同的操作找到所有文档:

NSSet * dataItemDocuments = [[dataItem orderedPositions] valueForKey:@"document"];
Run Code Online (Sandbox Code Playgroud)


Mar*_*eau 3

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

当我研究保持核心数据对象有序的不同策略时,我发现一篇博客文章详细解释了如何做到这一点,还包括示例代码。