Вы хотите сделать выборку для элемента элемента. Из вашего описания не ясно, определили ли вы обратные отношения 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.