Лучший способ смоделировать выбор одного объекта в отношении ко многим в Core Data - PullRequest
1 голос
/ 04 декабря 2011

Я бы хотел модель в следующем примере в Core Data:

Предположим, есть два управляемых объекта, Owner и Item, где Owner имеет отношение ко-многим с набором Item с, указывающим, чем владеет Item с. Item имеет обратное отношение "один к одному", что указывает на Owner. Кроме того, я бы хотел Owner сохранить ссылку на конкретный Item, который он в данный момент выбирает / использует / etc. Вот то, что идеальное решение этой ситуации будет включать:

  1. Owner может быстро и удобно получить доступ к выбранному Item, в идеале точно так же, как и к любым обычным отношениям «один к одному».
  2. Выбранный Item может быть установлен только для объекта в списке Owner из Item s. АКА, невозможно установить для выбранного Item значение Item, которое еще не принадлежало.
  3. Item имеют свое собственное свойство BOOL, которое всегда актуально и указывает, выбраны ли они их Owner. Если он выбран, и я хочу знать Owner, я просто буду использовать другое свойство обратной связи.
  4. В общем, было бы неплохо поддерживать все в автоматическом и актуальном состоянии, например, если Item удаляется из набора Item, принадлежащего в Owner, во время его выбора, то он автоматически не выбирается а также.

Я уже пробовал некоторые ограниченные решения, которые не удовлетворяют всем моим идеальным требованиям выше, но работают нормально. Например, прямо сейчас у меня есть два отношения, отношение ко многим, указывающее все принадлежащие Item s, и отношение один к одному, связывающее текущий выбранный Item обратно с Owner. Это работает, но требует, чтобы я всегда был очень осторожен в своем коде, чтобы убедиться, что все становится непоследовательным. Кроме того, выбранный Item затем имеет два отдельных отношения «один к одному» обратно к Owner. Мне кажется, что это плохой дизайн, потому что он дает программисту много возможностей испортить отношения, если они не обновляют все последовательно при внесении изменений.

Итак, мой вопрос: есть ли у кого-нибудь еще лучшее решение этой проблемы? У меня есть больше идей о том, как я могу сделать это лучше, но ни одно из них не кажется мне удобным, и мне интересно, является ли это общей проблемой, которая уже решена.

1 Ответ

0 голосов
/ 05 декабря 2011

Matt,

Вероятно, вашу проблему легче всего решить с помощью пользовательских средств доступа для выбранного элемента.Вы сохраняете выбранное состояние?Если нет, то временные отношения один-к-одному с пользовательскими средствами доступа, обеспечивающие соблюдение ограничений на членство, будут соответствовать всем требованиям.BOOL хранится как NSNumber и, насколько я вижу, не особенно эффективен в отношении использования пространства, чем обратное соотношение.

Andrew

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...