CoreData:获取具有二度条件的实例

时间:2013-10-21 10:18:49

标签: ios objective-c core-data nspredicate fetch

我的CoreData结构是这样的:

A.setWithBs ->> B
B.setWithCs ->> C

现在,只知道A,我需要在setWithBs中获取链接到特定C的唯一B。这可以通过单次获取优雅地完成吗?

由于

2 个答案:

答案 0 :(得分:0)

您可以使用“self in”和“Subquery”请求进行尝试。没有测试过这种特殊情况,但这应该是你必须要去的方式

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"B" inManagedObjectContext:context]];

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self in %@ AND SUBQUERY(setWithCs, $sc, $sc == %@).@count > 0", A.setWithBs, C];

答案 1 :(得分:0)

假设您还定义了反向关系(您应该这样做)

B.inA --> A, C.inB --> B

然后您可以执行以下获取请求:

A *theAObject = ...;
C *theCObject = ...;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"B"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(inA = %@) AND (ANY setWithCs = %@)",
         theAObject, theCObject];
[request setPredicate:predicate];

它获取与给定“A”对象相关的所有“B”对象(通过反向关系“inA”)并且还与给定的“C”对象相关(通过to-many关系) “setWithCs”)。