如何在核心数据中存储混合数组

时间:2010-07-07 01:05:03

标签: iphone objective-c cocoa-touch core-data arrays

我需要在Core Data的数组中存储两种类型的对象FeedFolder。例如:

Array
    Feed
    Feed
    Folder
    Feed
    Folder
    Folder
    …etc...

我知道BWOrderedManagedObject用于在Core Data中按顺序存储对象,但我不确定如何存储混合对象(数组需要混合,因为项目按特定顺序排列)。理想情况下,我有一个指向两个实体的关系,但显然这是不可能的。

我能看到的唯一解决方案是使数组成为Transformable属性。但是,存储在数组中的对象呢?我是否需要自己管理所有这些内容,还是仍然需要Core Data管理?

1 个答案:

答案 0 :(得分:3)

以下是我的表现:

alt text http://gallery.me.com/davedelong/100084/Screen%20shot%202010-07-06%20at%207.22.10%20PM/web.png?ver=12784658050001

AbstractListItem是一个抽象实体,具有order属性和与Folder的关系,表示项目的(单个)父级。

FolderAbstractListItem的具体子项,与AbstractListItem具有多对多的关系,这意味着该文件夹可以包含所需的子项AbstractListItems (所以FoldersFeeds)。

Feeds并不特别,除了它们也从AbstractListItem继承(意味着它们有一个订单和一个父级,并且可以是Folder的子级。)< / p>

因此,一旦你有了一个文件夹,就可以通过以下方式让所有孩子顺利完成:

NSArray * orderedChildren = [[aFolder children] sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES]]];

要获取顶级项目,您需要执行抓取工作,查找AbstractListItem所有parent = nil个对象。