У меня есть модель Core Data, в которой объект Task включает необязательное отношение to-many excludedOccurrences. Одним из свойств excludedOccurrences является запуск, который является объектом NSDate. Объект ExcludedOccurrence имеет обратное обязательное отношение к одному объекту Task.
Чтобы получать задания за указанный день, мне нужно убедиться, что указанный день не отображается как свойство start любого объекта ExcludedOccurrence. Поэтому один из суб-предикатов, который я пытаюсь использовать,
NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"(ALL excludedOccurrences.start != %@))", today];
где сегодня есть объект NSDate на сегодняшний день, включая только компоненты дня, месяца и года. Все свойства запуска исключенных вхождений также включают компоненты дня, месяца и года.
Хотя это должно быть хорошо, по крайней мере, для чтения документации для Core Data и NSPredicate, я получаю следующее сообщение об ошибке:
Завершение приложения из-за неперехваченного исключения "NSInvalidArgumentException", причина: "Неподдерживаемый предикат
Если я использую эквивалентный предикат
NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"!(ANY excludedOccurrences.start == %@))", today];
исключение не генерируется, однако код работает не так, как ожидалось: исключение из этого списка, которое не должно быть исключено.
Я также не уверен, как тестировать для case excludedOccurrences == nil: следующий предикат
NSPredicate *nilPredicate = [NSPredicate predicateWithFormat: @"(excludedOccurrences == nil)"];
вызывает во время выполнения исключение
to-many не разрешено здесь
Однако, поскольку отношение excludedOccurrences не является обязательным, мне также нужно проверить, нет ли он.
Как я могу справиться с этим? Заранее благодарю вас.