Я пытаюсь получить количество записей от связанной сущности, которые соответствуют критериям - PullRequest
1 голос
/ 20 декабря 2010

У меня есть совпадения сущностей, которые связаны со многими наборами сущностей. Я хочу получить счетчик того, сколько наборов имеют атрибут set_finished, установленный в YES для конкретного соответствия. Я пытаюсь сделать это с:

NSPredicate * предикат = [NSPredicate предикатWithFormat: @ "ЛЮБОЙ set_finished == ДА"]; NSUInteger numberOfFinishedSets = [[[match valueForKeyPath: @ "sets"] FilterArrayUsingPredicate: предикат] count];

Вторая строка вылетает с этой ошибкой, которую я не понимаю. Кто-нибудь может пролить свет на это для меня? Спасибо.

2010-12-20 13: 17: 13.814 DartScorer [2154: 207] * Завершение приложение из-за неисследованного исключения NSInvalidArgumentException, причина: «- [_ NSFaultingMutableSet filteredArrayUsingPredicate]: нераспознанный селектор отправлен на экземпляр 0x617fb20'

Ответы [ 4 ]

0 голосов
/ 20 декабря 2010
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY set_finished == YES).@count"];  
NSUInteger numberOfFinishedSets = [[match valueForKeyPath:@"sets"] filteredSetUsingPredicate:predicate];

Это просто вернет счетчик количества объектов вместо фактического извлечения объектов с диска и их подсчета.

0 голосов
/ 20 декабря 2010

Вы должны использовать filteredSetUsingPredicate: вместо filteredArrayUsingPredicate, поскольку объект является множеством, а не массивом.

0 голосов
/ 20 декабря 2010

_NSFaultingMutableSet является своего рода пустым набором (если вы распечатаете набор, вы увидите, что xcode печатает имя сущности, но не ее содержимое. Это происходит потому, что:

Faulting уменьшает количествопамяти, используемой вашим приложением. Ошибка - это объект-заполнитель, представляющий управляемый объект, который еще не полностью реализован, или объект коллекции, представляющий отношение:

Ошибка управляемого объекта - это экземпляр соответствующего класса., но его постоянные переменные еще не инициализированы. Ошибка отношения является подклассом класса коллекции, который представляет отношение. Ошибка позволяет Базовым данным устанавливать границы на графе объектов. Поскольку ошибка не реализована, ошибка управляемого объекта потребляет меньшепамять и управляемые объекты, связанные с неисправностью, вообще не обязательно должны быть представлены в памяти.

Я думаю, вам следует создать Set для хранения объектов, которые вы хотите отфильтровать, а затем отфильтровать массивесть креаТед.

надеюсь, что это поможет Шани

0 голосов
/ 20 декабря 2010

Попробуйте заключить строку YES в одинарные кавычки "... 'YES'"

(при условии, что поле содержит строки 'YES' и 'NO', а не 1 | 0)

...