NSPredicate ALL Агрегировать с хранилищем SQLite - PullRequest
1 голос
/ 18 мая 2011

У меня есть объект под названием «Вложение», где он имеет отношение ко многим без обратной связи.

Я пытаюсь найти все сущности Вложения, у которых downloaded атрибут NO, имя отношения attachments, и я написал следующий предикат для этого.

[NSPredicate predicateWithFormat:@"ALL attachments.downloaded == NO"]

Что приводит к *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'

Это происходит только в хранилище SQLite, если я изменяю хранилище на двоичное, похоже, оно работает нормально Я бы предпочел придерживаться магазина SQLite.

Есть идеи? В любом случае, написать предикат по-разному для достижения того же желаемого результата?

Ответы [ 3 ]

2 голосов
/ 28 сентября 2012

Это может быть вне времени, НО все же кто-то может все еще найти ответ полезным.

В настоящее время данные Core, использующие SQLite в качестве внутреннего хранилища, НЕ поддерживают модификатор ALL.Как бы просто это не звучало, вот почему вы можете использовать его для фильтрации массивов в памяти, чтобы достичь желаемых результатов.Что касается SQLite, он реализует операцию деления для условного оператора, указанного модификатором.Тем не менее, NSPredicate не ограничивает вас в использовании его как части NSCompoundPredicate, что увеличивает трудность для генератора SQL генерировать оператор SQL.

1 голос
/ 19 мая 2011

Ваше описание схемы немного неясно, но я думаю, что вы просто хотите выполнить выборку для сущностей Attachment с предикатом ...

[NSPredicate predicateWithFormat:@"downloaded == NO"]

Вы пробовали это?

Я могу быть совершенно не прав здесь ^ _ ^

0 голосов
/ 18 мая 2011

Кажется, сейчас я нашел решение ...

attachmentRequestResults = [self.managedObjectContext executeFetchRequest:attachmentIdRequest error:&error];
attachmentPredicate = [NSPredicate predicateWithFormat:@"ALL attachments.downloaded == NO"];
attachmentRequestResults = [attachmentRequestResults filteredArrayUsingPredicate:attachmentPredicate];

Я удалил предикат для fetchrequest, чтобы он возвращал все сущности, а затем запустил свой предикат в возвращенном массиве

Все еще ищу решение, где я могу выполнить предикат для Базовых данных, хотя

...