Ищите элегантный способ хранить отношения «один ко многим» в coredata, когда важен порядок - PullRequest
1 голос
/ 20 марта 2010

Я пытался придумать способ решить мою проблему, но каждое решение, которое я могу придумать, является грязным и заставляет меня хотеть рвота.

У меня есть отношение один ко многим, состоящее из объекта Team, который может иметь много объектов Member. Когда я построил свою модель данных с использованием XCode, мне дали NSSet по умолчанию, в котором хранятся объекты-члены. К сожалению, наборы не упорядочены, и мне нужно сохранить порядок объектов-членов, и мне нужно знать, есть ли пустые места между Пользователи.

Я подумал об использовании NSArray вместо NSSet и создании фиктивного объекта Member в моем хранилище данных, которое я мог бы использовать, чтобы пометить вакантное место между объектами Member, но это решение на самом деле кажется слишком хакерским. мне. Так как мне всегда придется отфильтровывать этого фиктивного члена от любых запросов.

NSDictionary был бы идеальным, так как я мог бы хранить ссылки на объекты Member и их позиции в виде пар Object-Key (заботясь как о порядке, так и о вакансиях), но, очевидно, CoreData не поддерживает NSDictionary.

Кто-нибудь имел подобную потребность и придумал простое решение?

Ответы [ 2 ]

4 голосов
/ 20 марта 2010

Упорядоченные отношения тривиальны для реализации. Вот код, который я сделал для одного из подклассов NSManagedObject.

(По какой-то причине я не могу опубликовать отформатированный код сегодня в Stackoverflow.)

В этом случае яУ вас установлены отношения вроде:

AlphaEnity<-->>AlphaToBetaEntity<<-->BetaEntity

AlphaToBetaEntity имеет атрибут order.Я сортирую AlphaToBetaEntity и затем возвращаю связанный BetaEntity по мере необходимости.Это похоже на сортировку указателей в старой школе C.

Преимущество состоит в том, что он быстро вспыхивает на очень больших наборах, и вам не нужно ошибаться в BetaEntity, пока вам не понадобится прочитать атрибут из него.

3 голосов
/ 20 марта 2010

Отсутствие упорядоченных взаимосвязей базовых данных со многими является артефактом базовой структуры базы данных. Причины этого, наряду с потенциальными решениями, обсуждаются в этой ветке списка рассылки Cocoa . Решения включают добавление свойства индекса к управляемым объектам или ведение этих объектов в связанном списке.

Если вы не хотите делать это самостоятельно, Брайан Вебстер собрал реализацию упорядоченных взаимосвязей Core-Data здесь .

Наконец, если вы хотите отказаться от Базовых Данных, новая структура BNRPersistence Аарона Хиллегаса поддерживает упорядоченные отношения.

...