Ваша проблема в том, что отношение одного из вас - это ключевой путь «многие-ко-многим», и предикат не знает, какой именно объект идет с каким.
У вас есть ThemeEntities<<-->>Quotes
, который производит набор на каждом конце.Путь к ключу quotes.author.alias
говорит «набор экземпляров кавычек, каждый из которых связан с экземплярами автора, который в свою очередь имеет атрибут псевдонима».Предикат не может обрабатывать множество.
Вам нужно использовать подзапрос, чтобы перейти к многим путям.Подзапрос, по сути, является вложенным предикатом, который ищет набор и возвращает другой набор объектов, соответствующий вложенному предикату.Подзапросы плохо документированы, но имеют форму:
SUBQUERY(collectionName,$collectionElementVariable,expression-with-$collectionElementVariable)
. В этом случае вы ищете любые экземпляры цитаты, имеющие отношение автора с псевдонимом, соответствующим предоставленной строке.Ваш предикат должен выглядеть следующим образом:
@"theme.name_en=%@ AND (0!=SUBQUERY(quotes,$eachQuote,$eachQuote.author.alias=%@).@count)",@"mytheme", @"myauthor"
Подзапрос говорит: «Из набора кавычек возьмите каждый объект цитаты и проверьте, имеет ли его объект отношения автора с псевдонимом атрибут, соответствующий« myauthor ».количество объектов кавычек с этим соответствием. Если число не равно нулю, верните ИСТИНА. "
Вам нужно использовать подзапросы всякий раз, когда вы проходите путь к ключу через отношение ко многим.