核心数据多对多关系查询

时间:2013-03-07 12:03:59

标签: ios objective-c core-data nspredicate

假设两个实体:EntityA和EntityB,由多对多关系连接。假设关系属性分别是relatedEntityBs和relatedEntityAs。我有一个EntityB实例的NSArray。我想找到所有与nsarray中的所有实例相关的EntityA实例。也就是说,如果数组是[entityB1,.....,entityBn]。查找所有与entityB1相关的EntityA实例,wntityB2直到entityBn。我该如何编写这种谓词?

1 个答案:

答案 0 :(得分:2)

这个谓词应该这样做:

NSMutablArray *predicateArray = [NSMutableArray array];
for (int i=0;i<entityBArray.count;i++){
     NSPredicate *subPredicate = [NSPredicate predicateWithFormat:@"ANY relatedEntityBs contains %@",[entityBArray objectAtIndex:i];
     [predicateArray addObject:subPredicate] ;
} 
NSCompoundPredicate *daddyPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicateArray];

基本上每个子谓词检查relatedEntityB是否包含数组的单个对象,最后daddyPredicate将它们全部与OR组合在一起。