2010-05-12 195 views
1

我有一个多对多关系的数据模型,如EntityA <-->> EntityB <<--> EntityC。我曾经用不同的搜索条件查询EntityA,我使用NSCompoundPredicateNSPredicate的数组。在其中一个谓词中,我想用EntityC查询EntityA。我试图使用以下SUBQUERY,但它没有奏效。核心数据多对多关系NSPredicate

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

而且我得到以下异常,

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

有什么我失踪。我将不胜感激任何帮助。

萨拉

回答

3

(我有很多的麻烦令人费解了你的谓语所以借此与一粒盐。)

我认为你使这个过于复杂。你应该简化keypaths。每个实体B与实体C具有一对一的关系,因此在EntityB对象上搜索所有你需要做的就是检查EntityB.entityCRelationshipName.entityCAttribute。因此,像:

ALL B.EntityC.name like %@ 

在任何情况下,(如果我正确读谓语)这样的:

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

只能返回集合的单个对象来代替。因此,谓词将无法对它进行计数。这就是你的错误信息的含义。

我建议在数据模型编辑器中使用谓词编辑器在存储它们之前散列谓词。

+0

谢谢你的回复,我已经使用过你的方法,但得到了以下异常***由于未捕获的异常'NSInvalidArgumentException',原因:'不支持的谓词ALL B.EntityC.name LIKE“name”'和I使用谓词编辑器来构建它。 – Sarah 2010-05-13 07:54:37

+1

尝试使用'ANY entityB.entityC.name LIKE [c] $ aName'并提供“aName”变量。确保您的关系名称与实体名称不完全相同。 – TechZen 2010-05-13 12:25:51

+0

ANY entityB.entityC.name LIKE [c] $ aName工作得很好,谢谢 – Sarah 2010-05-13 13:06:19