У меня есть базовая модель данных, в которой объект «Задача» включает в себя необязательное отношение «многие ко» «ExcludedDays» к объекту «ExcludedDay». Одним из свойств ExcludedDay является day, который является объектом NSDate. Сущность ExcludedDay имеет обратное обязательное отношение «один к одному» с сущностью Task.
Чтобы получить задачи для указанного дня, мне нужно убедиться, что указанный день не отображается как свойство дня какой-либо сущности ExludedDay.
Я начал пытаться
NSPredicate *dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"ALL excludedDays.day != %@", today];
Однако, несмотря на то, что сказано в документации, ALL не работает, и приложение выдает исключение: Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Неподдерживаемый предикат.
После публикации того же вопроса на этом форуме, я смог разработать следующий предикат с помощью различных людей:
NSPredicate * dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"excludedDays.@count == 0 || (excludedDays.@count > 0 && NONE excludedDays.day == %@))", today];
Хотя сначала это работало, я только что обнаружил, что это работает только тогда, когда сущность ExcludedDay содержит ТОЛЬКО один день. Как только объект ExcludedDay содержит более одного дня для одной и той же задачи, этот предикат перестает работать. В результате задача выбирается на день, даже если день отображается в сущности ExcludedDay как день, что, конечно, неправильно. Проблема не связана с тем, что день свойства является объектом NSDate: заменив день соответствующей строкой NSS или эквивалентно целым числом, я все еще сталкиваюсь с той же проблемой и неправильным поведением.
Как правильно реализовать предикат в этом случае? Может ли это быть ошибка, связанная с ЛЮБЫМ оператором агрегирования при использовании основных данных?
Заранее спасибо, теперь это сводит меня с ума.