Ответ 1
Итак, похоже, что в комментариях к исходному сообщению мы установили, что это, скорее всего, вызвано тем, что хранилища SQLite несовместимы с предикатами блоков, поскольку Core Data не может перевести их в SQL для запуска их в магазине (спасибо, JoostK).
Возможно, существует несколько способов преодолеть это:
- Если конечная дата ваших сущностей является обычным атрибутом, вы можете выразить ограничение срока действия как строку предикатного формата вместо предиката блока, которые основные данные должны иметь возможность перевести в предложение SQL.
- Если это возможно, вы, вероятно, предпочтете использовать шаблон запроса выборки для извлечения устаревших элементов. Однако вам нужно будет передать переменную подстановки, например
$NOW
, чтобы предоставить доступ к текущей дате. Это имеет то преимущество, что шаблон предиката отображается в редакторе моделей. - Оба подхода, однако, имеют недостаток дублирования существующей функциональности (т.е. вашего метода
isExpired
). Таким образом, другой способ будет извлекать все качественные сущности, независимо от состояния их истечения, а затем запустить выделенный этап фильтрации на результирующем множестве объектов для отсечения неиспользуемых. Поскольку к этому моменту они были полностью воскрешены из магазина, вы должны иметь возможность использовать предикат блока для этого.