Ищете элегантный способ хранить отношения "один ко многим" в coredata, когда важен порядок

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

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

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

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

У кого-нибудь была подобная потребность, и он придумал простое решение?

2 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам