Основные данные iPhone - Доступ к глубоким атрибутам со многими связями - PullRequest
1 голос
/ 19 апреля 2010

Допустим, у меня есть пользователь сущности, который имеет отношение один ко многим с меню сущности, который имеет отношение один ко многим с едой сущности, которая имеет отношение многие к одному с рецептом сущности, который имеет отношение один ко многим с элементом сущности. Что я хотел бы сделать, это выбрать элементы, которые принадлежат конкретному пользователю (username = myUsername) и определенному меню s (minDate

1 Ответ

2 голосов
/ 19 апреля 2010

Вы хотите сделать выборку для элемента элемента. Из вашего описания не ясно, определили ли вы обратные отношения 1 (например, элемент к получателю) и являются ли они множеством или одним. Предполагая, что вы определили их, и они относятся к единице, вы можете сделать выборку с помощью предиката, подобного [2]:

[NSPredicate predicateWithFormat:@"%@ > recipe.meal.menu.date && recipie.meal.menu.date < %@ && recipie.meal.menu.user.username LIKE[cd] %@", minDate, maxDate, myUsername];

Я использовал LIKE[cd] для нечувствительного к регистру и диакритического нечувствительного сравнения имени пользователя. Также обратите внимание, что базовые данные хранят даты как двойные NSTimeInterval, без информации о часовом поясе. Если вы хотите провести сравнение дат с учетом часового пояса, вам предстоит гораздо больше работы.

1 Если вы не определили обратные отношения, сделайте это . Как уже много раз говорилось в других местах, Core Data - это структура управления графами, которая, как оказалось, способна сохранять свой граф на диске. Он будет выполнять большую часть закулисной работы, чтобы автоматически поддерживать ссылочную целостность для вас, если вы определите обратные отношения. В частности, для отношений «многие ко многим» Core Data фактически требует обратного, чтобы все заработало.

[2] Если вы определили для-многих инверсий то, что я предположил для-один, вам придется использовать несколько более сложный предикат. Первый пункт, например, будет

@"ANY (@unionOfSets.recipe.meal.menu.date) < %@"

(этот последний бит не проверен; операторы множеств KVO всегда немного экспериментируют для меня). Вы можете прочитать об операторах set и array KVO.

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