繁体   English   中英

如何使用NSPredicate过滤核心数据关系?

[英]How can I use NSPredicate to filter on core data relationships?

假设我有“obj”类型的核心数据对象,它具有属性“propertyA”和与“sub”类型的对象的一对多关系,该对象具有两个属性“propertyB”和“propertyC”。

我想获取propertyA等于一个值的所有objs和一个带有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,但这也不起作用。 我怎样才能做到这一点?

由于您与子对象具有多对多关系,因此objsubs属性返回一个集合而不是单个对象。 要查询集合,您需要使用SUBQUERY。

子查询具有以下形式:

SUBQUERY(collection, $individualCollectionItem, expression-with-collection-item)

在这种情况下,你会想要类似的东西

SUBQUERY(subs,$s,$s.propertyB==%@) AND SUBQUERY(subs,$s,$s.propertyC!=NULL)

解决方案似乎是:

[NSPredicate predicateWithFormat:@"propertyA == %@ AND (SUBQUERY(sub, $s, $s.propertyB == %@ AND $s.propertyC == %@).@count != 0)",  propertyAvalue, propertyBvalue, propertyCvalue];

最后的值是您希望各种属性等于的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM