假设我有“obj”类型的核心数据对象,它具有属性“propertyA”和与“sub”类型的对象的一对多关系,该对象具有两个属性“propertyB”和“propertyC”。
我想获取propertyA等于值的所有obj和带有propertyB和propertyC set的子obj。
如果只是propertyA和propertyB,我会做
[NSPredicate predicateWithFormat:@"ANY sub.propertyB = %@ AND propertyA == %@", ...];
问题是我无法弄清楚如何添加第二个属性。我只想要至少有一个具有两个属性为true的子的obj。我尝试了以下内容,但它不起作用:
[NSPredicate predicateWithFormat:@"ANY (sub.propertyB = %@ AND sub.propertyC) AND propertyA == %@", ...];
我已经尝试过没有ANY,但这也不起作用。我怎么能这样做?
答案 0 :(得分:7)
由于您与子对象具有多对多关系,因此subs
的{{1}}属性将返回一个集合而不是单个对象。要查询集合,您需要使用SUBQUERY。
子查询的格式为:
obj
在这种情况下,你会想要像
这样的东西SUBQUERY(collection, $individualCollectionItem, expression-with-collection-item)
答案 1 :(得分:4)
解决方案似乎是:
[NSPredicate predicateWithFormat:@"propertyA == %@ AND (SUBQUERY(sub, $s, $s.propertyB == %@ AND $s.propertyC == %@).@count != 0)", propertyAvalue, propertyBvalue, propertyCvalue];
其中末尾的值是您希望各种属性等于的值。