谓词不适用于两个@count运算符

时间:2011-08-28 12:50:21

标签: objective-c ios cocoa-touch core-data nspredicate

对于具有两个一对多关系(collectionA和collectionB)的实体,此代码为NSFetchRequest分配谓词:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"(collectionA.@count > 0 ) OR (collectionB.@count > 0)" ]];

但是该谓词不起作用并且所有对象都被选中。如果我为另一个更改该行:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"collectionA.@count > 0" ]];

然后它按预期工作,它返回collectionA中至少有一个项目的所有对象。对于collectionB也是如此。但是当我尝试OR操作来获得两者的组合时,它不会过滤任何对象,就好像谓词被忽略一样。

我确定我做错了,也许两个@count运算符不能用在同一个谓词中。如何编写谓词以获取具有collectionA或collectionB中任何项目的对象的结果?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我知道没有理由为什么两个@count集合运算符无法在同一个谓词中运行。有时,你会遇到predicateWithFormat的奇怪问题。我建议创建两个单独的谓词,然后将它们与:

组合
-[NSCompoundPredicate orPredicateWithSubpredicates];

...直接创建复合谓词而不是依赖解析器通常可以解决此类问题。

但是,您确实希望确实实际上具有两个关系都为空的对象,因为您构建的谓词将返回在任一关系中具有一个或多个对象的所有托管对象。