1

私の CoreData 構造は次のようになります。

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

今、A だけを知っているので、特定の C にリンクする setWithBs で唯一の B をフェッチする必要があります。これは単一のフェッチでエレガントに行うことができますか?

ありがとう

4

2 に答える 2

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];
于 2013-10-21T10:38:20.717 に答える
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」オブジェクトに関連し (逆関係「inA」を介して)、指定された「C」オブジェクトにも関連している (対多関係「setWithCs」を介して) すべての「B」オブジェクトをフェッチします。

于 2013-10-21T11:15:55.147 に答える