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