您的问题是,其中一个键路径的关系是一对多、一对多,并且谓词不知道哪个特定对象与哪个对象对应。
你有ThemeEntities<<-->>Quotes
这在每一端产生一个集合。这quotes.author.alias
keypath 表示“一组引号实例,每个实例都链接到作者实例,而作者实例又具有别名属性。”谓词无法处理该集合。
您需要使用子查询来跳转对多键路径。子查询本质上是一个嵌套谓词,它搜索一个集合并返回与嵌套谓词匹配的另一组对象。子查询的记录很少,但它们具有以下形式:
SUBQUERY(collectionName,$collectionElementVariable,expression-with-$collectionElementVariable)
在这种情况下,您要查找与提供的字符串匹配的别名具有作者关系的任何报价实例。您的谓词需要如下所示:
@"theme.name_en=%@ AND (0!=SUBQUERY(quotes,$eachQuote,$eachQuote.author.alias=%@).@count)",@"mytheme", @"myauthor"
子查询表示,“在报价集中,获取每个报价对象并测试其作者关系对象是否具有与 'myauthor' 匹配的别名属性。计算与该匹配的报价对象的数量。如果数量非零,则返回真的。”
每当您在一对多关系中遍历关键路径时,都需要使用子查询。