Как сохранить смешанный массив в основных данных - PullRequest
1 голос
/ 07 июля 2010

Мне нужно хранить два типа объектов, Feed и Folder, в массиве в Core Data.Например:

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

Я знаю о BWOrderedManagedObject для хранения объектов в порядке в Базовых данных, но я не уверен, как хранить смешанные объекты (массив долженсмешанный, так как предметы находятся в определенном порядке).В идеале, у меня должна быть связь, которая указывает на две сущности, но, очевидно, это невозможно.

Единственное решение, которое я вижу, - сделать массив атрибутом Transformable.Однако как насчет объектов, хранящихся в массиве?Мне нужно будет управлять ими всеми самостоятельно или они все еще будут управляться Core Data?

1 Ответ

3 голосов
/ 07 июля 2010

Вот как я это сделал:

альтернативный текст http://gallery.me.com/davedelong/100084/Screen%20shot%202010-07-06%20at%207.22.10%20PM/web.png?ver=12784658050001

AbstractListItem - это абстрактная сущность, которая имеет свойство order и отношение к Folder, которое указывает на (одного) родителя элемента.

Folder - это конкретный дочерний элемент AbstractListItem, который имеет отношение «ко-многим» к AbstractListItem, что означает, что в папке может быть столько дочерних элементов, сколько нужно, AbstractListItems (так что либо Folders Feeds).

Feeds не являются чем-то особенным, за исключением того, что они также наследуются от AbstractListItem (что означает, что у них есть порядок и родитель, и они могут быть потомками Folder).

Итак, когда у вас есть папка, вы можете привести в порядок все ее дочерние элементы, выполнив что-то вроде:

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

Чтобы получить элементы верхнего уровня, вы должны выполнить выборку для поиска всех AbstractListItem объектов, где parent = nil.

...