Core data 如何使用NSPredicate筛选核心数据关系?
假设我拥有类型为“obj”的核心数据对象,该对象具有属性“propertyA”,并且与类型为“sub”的对象具有一对多关系,该对象具有两个属性“propertyB”和“propertyC” 我想获取所有的obj,这些obj的propertyA等于一个值,子obj的propertyB和propertyC设置为 如果只是财产A和财产B,我会的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 == %@",
[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];但我得到“无法解析格式字符串”。我根本没有得到任何带有子查询的谓词来解析/