我的CoreData结构是这样的:
A.setWithBs ->> B
B.setWithCs ->> C
现在,只知道A,我需要在setWithBs中获取链接到特定C的唯一B。这可以通过单次获取优雅地完成吗?
由于
答案 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”)。