CoreData, отношения «многие ко многим» и NSPredicate - PullRequest
3 голосов
/ 14 декабря 2009

У меня есть модель данных CoreData, которая включает отношение многие ко многим. Как оказалось, NSPredicate не поддерживает отношения «многие ко многим». Из CoreData.pdf: «В предикате может быть только один элемент« многие-много »в ключевом пути.

Как пример рецепта: множество рецептов и много ингредиентов. Рецепт может иметь много ингредиентов, из которых «соль» может быть одним, а «соль» используется во многих рецептах. Это естественные отношения «многие ко многим».

Какие предлагаются обходные пути?
Была ли CoreData плохой идеей, и я должен вернуться к SQLite?

Ответы [ 2 ]

5 голосов
/ 15 декабря 2009

Насколько я понимаю, вы можете превратить любое отношение многие ко многим в отдельные отношения один ко многим, добавив промежуточный объект.

У вас есть:
В рецепте много ингредиентов.
Ингредиент имеет много рецептов.

Создайте новую сущность RecipeIngredient, такую ​​что:
Рецепт имеет много ингредиентов рецепта.
Ингредиенты имеют много рецептов.
Ингредиент рецепта имеет один рецепт и один ингредиент.

1 голос
/ 30 октября 2013

Этот вопрос фактически привел меня на неверный путь с проблемой, с которой я столкнулся. Оказывается, вы можете запросить отношение многие ко многим с помощью предиката. Вы просто не можете запросить дальше, как A <<-->> B <<-->> C

Предикат, который я использовал (в модели с Story <<-->> Team), был таким ...

[NSPredicate predicateWithFormat:@"SUBQUERY( teams, $t, $t IN %@ ).@count > 0", teams)];

Этот предикат используется в запросе на выборку для объекта Story. Вторая «команда» - это набор или набор команд, о которых я ищу истории. Формат SUBQUERY меня немного смущает, поэтому я отмечу, что его можно прочитать следующим образом: «Для каждой команды t в коллекции команд текущей истории посмотрите, есть ли она в этой другой коллекции (команды)».

Надеюсь, это поможет.

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