Core data 如何使用NSPredicate筛选核心数据关系?

Core data 如何使用NSPredicate筛选核心数据关系?,core-data,nspredicate,iphone,Core Data,Nspredicate,Iphone,假设我拥有类型为“obj”的核心数据对象,该对象具有属性“propertyA”,并且与类型为“sub”的对象具有一对多关系,该对象具有两个属性“propertyB”和“propertyC” 我想获取所有的obj,这些obj的propertyA等于一个值,子obj的propertyB和propertyC设置为 如果只是财产A和财产B,我会的 [NSPredicate predicateWithFormat:@"ANY sub.propertyB = %@ AND propertyA == %@",

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

我想获取所有的obj,这些obj的propertyA等于一个值,子obj的propertyB和propertyC设置为

如果只是财产A和财产B,我会的

[NSPredicate predicateWithFormat:@"ANY sub.propertyB = %@ AND propertyA == %@", ...];
问题是我不知道如何添加第二个属性。我只想要至少有一个子对象具有两个属性true的obj。我尝试了以下方法,但无效:

[NSPredicate predicateWithFormat:@"ANY (sub.propertyB = %@ AND sub.propertyC) AND propertyA == %@", ...];

我已经试过了,但也没用。如何执行此操作?

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

子查询的形式如下:

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];

其中末尾的值是您希望各种属性等于的值。

谢谢,但是我在任何apple文档中都找不到关于子查询的任何内容。如果我使用我的应用程序,它会被苹果商店拒绝吗?我根本无法让子查询工作。我最初的谓词是:NSPredicate*predicate=[NSPredicate predicateWithFormat:@“isdeleted==NO和任何appuserMessages.recAppUserID==%@”,appuserid];appuserMessages是多对多关系。我想要isTrash,所以我尝试了:[NSPredicate predicateWithFormat:@“isdeleted==NO和任何子查询(appuserMessages,$am,$am.recAppUserID===%@和$am.isTrash==NO)”,appuserid];但我得到“无法解析格式字符串”。我根本没有得到任何带有子查询的谓词来解析/