核心数据多对多关系NSPredicate

时间:2010-05-12 20:44:22

标签: iphone core-data many-to-many nspredicate

我有一个像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 个答案:

答案 0 :(得分:3)

(我在解释你的谓词方面遇到了很多麻烦,所以请不要理睬这一点。)

我认为你让这个过于复杂。您应该使用keypath进行简化。每个EntityB与EntityC具有一对一的关系,因此要搜索EntityB对象,您需要检查EntityB.entityCRelationshipName.entityCAttribute。如下所示:

ALL B.EntityC.name like %@

在任何情况下,(如果我正确读取谓词):

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

只能返回单个对象而不是集合。因此,谓词将无法对其进行计数。这就是您的错误消息的含义。

我建议在数据模型编辑器中使用谓词编辑器在存储谓词之前对其进行散列。