1

我有一个具有多对多关系的数据模型,例如EntityA <-->> EntityB <<--> EntityC. 我曾经使用EntityA不同的搜索条件进行查询,并使用sNSCompoundPredicate数组NSPredicate。在我想EntityA使用查询的谓词之一上EntityC。我尝试使用以下内容SUBQUERY,但没有奏效。

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

我得到了以下异常,

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:
'无法对非收集对象执行收集评估。'

有什么我想念的吗。我将不胜感激任何帮助。

莎拉

4

1 回答 1

3

(我在弄清你的谓词时遇到了很多麻烦,所以对此持保留态度。)

我认为您使这过于复杂。您应该使用键路径进行简化。每个 EntityB 与 EntityC 具有一对一的关系,因此要搜索 EntityB 对象,您需要做的就是检查EntityB.entityCRelationshipName.entityCAttribute。所以像:

ALL B.EntityC.name like %@

无论如何,(如果我正确阅读谓词)这个:

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

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

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

于 2010-05-12T21:36:33.010 回答