Я бы хотел модель в следующем примере в Core Data:
Предположим, есть два управляемых объекта, Owner
и Item
, где Owner
имеет отношение ко-многим с набором Item
с, указывающим, чем владеет Item
с. Item
имеет обратное отношение "один к одному", что указывает на Owner
. Кроме того, я бы хотел Owner
сохранить ссылку на конкретный Item
, который он в данный момент выбирает / использует / etc. Вот то, что идеальное решение этой ситуации будет включать:
-
Owner
может быстро и удобно получить доступ к выбранному Item
, в идеале точно так же, как и к любым обычным отношениям «один к одному».
- Выбранный
Item
может быть установлен только для объекта в списке Owner
из Item
s. АКА, невозможно установить для выбранного Item
значение Item
, которое еще не принадлежало.
Item
имеют свое собственное свойство BOOL, которое всегда актуально и указывает, выбраны ли они их Owner
. Если он выбран, и я хочу знать Owner
, я просто буду использовать другое свойство обратной связи.
- В общем, было бы неплохо поддерживать все в автоматическом и актуальном состоянии, например, если
Item
удаляется из набора Item
, принадлежащего в Owner
, во время его выбора, то он автоматически не выбирается а также.
Я уже пробовал некоторые ограниченные решения, которые не удовлетворяют всем моим идеальным требованиям выше, но работают нормально. Например, прямо сейчас у меня есть два отношения, отношение ко многим, указывающее все принадлежащие Item
s, и отношение один к одному, связывающее текущий выбранный Item
обратно с Owner
. Это работает, но требует, чтобы я всегда был очень осторожен в своем коде, чтобы убедиться, что все становится непоследовательным. Кроме того, выбранный Item
затем имеет два отдельных отношения «один к одному» обратно к Owner
. Мне кажется, что это плохой дизайн, потому что он дает программисту много возможностей испортить отношения, если они не обновляют все последовательно при внесении изменений.
Итак, мой вопрос: есть ли у кого-нибудь еще лучшее решение этой проблемы? У меня есть больше идей о том, как я могу сделать это лучше, но ни одно из них не кажется мне удобным, и мне интересно, является ли это общей проблемой, которая уже решена.