Основные данные Отношения многие ко многим NSP Предикат - PullRequest
1 голос
/ 13 мая 2010

У меня есть модель данных с отношением «многие ко многим», например EntityA <-->> EntityB <<--> EntityC. Я использовал запрос EntityA с другими критериями поиска, и я использую NSCompoundPredicate с массивом NSPredicate с. В одном из предикатов я хотел запросить EntityA, используя EntityC. Я попытался использовать следующее SUBQUERY, но это не сработало.

searchPredicate=[NSPredicate predicateWithFormat:@"(0 != SUBQUERY(EntityB, $B, (0 != SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@).@count)).@count)", name]

И я получил следующее исключение,

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'Can't perform collection evaluate with non-collection object.'

Есть что-то, что я пропускаю. Буду признателен за любую помощь.

Сара

1 Ответ

3 голосов
/ 13 мая 2010

(У меня было много проблем с тем, чтобы озадачить ваш предикат, так что возьмите это с крошкой соли.)

Я думаю, что вы делаете это слишком сложно. Вы должны упростить пути доступа. Каждый EntityB имеет отношение «один к одному» с EntityC, поэтому для поиска по объектам EntityB все, что вам нужно сделать, это проверить EntityB.entityCRelationshipName.entityCAttribute. Так что-то вроде:

ALL B.EntityC.name like %@

В любом случае (если я правильно читаю предикат) это:

SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@)

может возвращать только один объект вместо коллекции. Поэтому предикат не сможет рассчитывать на него. Вот что означает ваше сообщение об ошибке.

Я предлагаю использовать редактор предикатов в редакторе модели данных для хеширования предикатов перед их сохранением.

...