2

何千ものオブジェクトを持つエンティティ A があるとします。これらの各オブジェクトは、別のエンティティ B と 1 対多の関係にあります。エンティティ B の 1 つの属性は「セクション」です。

エンティティ A のすべてのオブジェクトの中で、B のすべての異なるセクションの NSSet が必要です。

A の 1 つのオブジェクトに対して B の個別のセクションのみが必要な場合は、次のようにします。

[A valueForKeyPath:@"B.section"];

しかし、A のすべてのオブジェクトに対してこれを取得する効率的な方法はありますか? A のすべてのオブジェクトをフェッチしてから、この配列を反復処理して上記を実行するのは「手間がかかりすぎる」ように思えます。確かにそれほど問題なく実行できますが、私のコア データの素朴さは、これを 1 行で実行するためのトリックを知らないことを意味するだけであることを願っています。

これはどのように行うことができますか?

ありがとう!

要求された明確化のために編集:

Person エンティティが Vehicles エンティティと対多の関係にあるとします。Vehicles エンティティに属性「color」があるとします。

私は、すべての人の所有するすべての車両のすべての色の NSSet が必要です。

4

2 に答える 2

1

私が正しく理解していて、 A-->B 関係に という名前の逆 B-->A 関係があると仮定するとあなたaの質問は次のように表現できますB.sectionB.a。これにより、 some に関連付けられているB.sectionfor everyの個別の値がそれぞれ取得されます。BA

その場合、次のようなものが必要です。

// Fetch B
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"B"];
// Fetch B that's related to an A
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a != nil"];
[request setPredicate:predicate];

// Fetch distinct values of "section", return values as NSDictionary
[request setResultType:NSDictionaryResultType];
[request setReturnsDistinctValues:YES];
[request setPropertiesToFetch:@["section"]];

それを実行すると、 の配列が得られますNSDictionary。辞書には、sectionに対応するという名前のキーがありますB.section。個別の値のみが含まれます。

于 2013-08-28T01:32:41.707 に答える
0

次の管理対象オブジェクト クラスがあると仮定します。

@interface A: NSManagedObject

@property (nonatomic, retain) NSSet *BSet;

@end

aObjというAのインスタンスがあり、BSet 内のすべてのオブジェクトを一意のセクションで取得する場合は、次のようにします。

NSArray *uniqueBSections = 
                  [aObj valueForKeyPath:@"@distinctUnionOfObjects.BSet.section"];
于 2013-08-28T02:48:42.233 に答える