У меня есть модель базовых данных, в которой объект Task включает в себя необязательное отношение «многие-многие» ExcludedDays к объекту ExcludedDay. Одним из свойств ExcludedDay является день, который является объектом NSDate. Объект ExcludedDay имеет обратное обязательное к одному отношение к объекту Task.Как правильно настроить NSPredicate для отношений «многие» при использовании Core Data?
Чтобы получить задания на указанный день, мне нужно убедиться, что указанный день не отображается как свойство дня любого объекта ExludedDay.
Я начал пытаться
NSPredicate *dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"ALL excludedDays.day != %@", today];
Однако, несмотря на то, что сказана в документации, все не работают и приложение выдает исключение: Нагрузочное приложение из-за неперехваченное исключение «NSInvalidArgumentException», причина: «неподдерживаемый предикат.
После размещения тот же вопрос, на этом форуме, я был в состоянии изобрести следующий предикат с помощью различных людей:
NSPredicate * dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"[email protected] == 0 || ([email protected] > 0 && NONE excludedDays.day == %@))", today];
В то время как это работало в первый, я только что обнаружил, что это работает только при объект ExcludedDay содержит ТОЛЬКО один день. Как только объект ExcludedDay содержит более одного дня для одной задачи, этот предикат перестает работать. В результате задача выбирается в течение дня, даже если день появляется как день в объекте ExcludedDay, что, конечно, неверно. Проблема не связана с тем, что день свойства является объектом NSDate: заменяя день соответствующей NSString или эквивалентно целому числу, я по-прежнему сталкиваюсь с той же проблемой и неправильным поведением.
Каков правильный способ реализации предиката в этом случае? Может быть, это ошибка, связанная с любым агрегирующим оператором при использовании основных данных? Заранее спасибо, теперь это сводит меня с ума.
Возможно, вы знаете, как написать выражение с SUBQUERY с классами NSExpresion и NSComparisonPredicate? С вашего ответа, я решил мой вопрос: http://stackoverflow.com/questions/2006927/whats-better-way-to-build-nspredicate-with-to-many-deep-relationships Благодарности – Victor
Большое вам спасибо за этот ответ, очень полезно. – Maria