2015-04-02 3 views
1

У меня есть основной объект данных, который называется Show, и для каждого шоу у меня есть отношение, которое называется Schedule, которое содержит атрибут, называемый schedules, который является массивом.NSPredicate count on атрибут отношения

Что я хочу сделать, так это создать предикат, который проверяет расписание данного шоу, если оно содержит более одного элемента.

Для того, чтобы сделать это, я попытался два решения:

  1. NSPredicate * predicate = [NSPredicate predicateWithFormat:@"schedule.schedules > 1];

  2. NSPredicate * predicate = [NSPredicate predicateWithFormat:@"[email protected] > 1];

Но никто из них не будет работать.

NB: атрибут schedule хранится в моих основных данных как Transformable и объявлен как переменная id.

ответ

2

Преобразуемый атрибут хранится как двоичные данные и не распаковывается до тех пор, пока объект контейнера не будет загружен в память. Таким образом, вы не можете использовать какой-либо предикат, основанный на трансформируемом атрибуте в выборке. Он будет работать только для фильтрации результатов извлечения.

Недорогое решение состоит в том, чтобы хранить простой целочисленный атрибут со счетчиком и использовать его.

Лучшее решение, вероятно, добавит/изменит ваши сущности, поэтому вы используете отношения вместо трансформируемых.

+0

Спасибо за ваш ответ, если я понимаю, нет способа сделать это без изменения модели данных ядра? – Ali

+0

Да, вам нужно будет каким-то образом изменить модель, чтобы решить вашу проблему. – Wain

0

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

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"@count.schedule.schedules > 1]; 
+0

Извините, но это не сработает: Завершить приложение из-за неотображенного исключения «NSInvalidArgumentException», причина: «Неправильная ключевая ссылка: @ count.schedule.schedules» – Ali

+0

Извините, я не проверял. Я использую '@avg.' в моем коде, и я думал, что он будет работать с '@count.' –

+0

Просто интересно, если «расписание. @ Count.schedules> 1», не пробовал ни –

Смежные вопросы