2011-12-10 8 views
0

私はコアデータの初心者ですので、次の点を心がけています。コアデータ、集計数とともに明確に多対多関係を表示

のは、私は次のモデルがあるとしましょう:

Kid (1) -> (M) ToyName (car) 
        ToyAttributes (1) -> (M) key (color), value (black) 
              key (price), value (20) 
              key (store), value (toys r us) 

ToyAttributesは、3つのキー/値のペアを持っています。

私がしたいことは、色をはっきりとリストすることです。だから、他のおもちゃも黒であれば、一度だけ黒を表示したい。

いいえ、私たちが持っている黒い玩具の数の総計を表示することです。

は、私は現在、以下があります。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Kid" inManagedObjectContext:managedObjectContext_]; 

しかし、適切なキー=色を見つけて、すべての子供のためにこれらの値を取得するために、適切なKVCを構築する方法がわかりません。

答えて

0

エンティティで逆関係を設定する必要があります。NSPredicateを使用して黒をフェッチすると、逆関係に従って目的のToyNameを取得できます。

あなたは最小限のもの読みたい:
Fetching Managed Objects
Predicate Format String Syntax


これは完璧ではないし、あなたが探しているではない、まさに、まだ例の私が持っているいくつかの古いコードであり、 NSPredicateの使用。
これは、単純にNSFetchRequestであり、何らかの方法で順序付けされたすべてのkListeエンティティを返します。 folloing self.list

​​

先行リクエストにフェッチしたNSManagedObjectの一つです。

// those NSSet are set that were return from a simple relationship query 
// so those set contain NSManagedObject 
NSSet *desListeItems = self.liste.listeItems; 
// HERE I'm fetching the relationship kRelationPrixElement on all NSManagedObject 
// present in the set desListeItems (one to one relationShip) 
NSSet *desPrixElements = [desListeItems valueForKey:kRelationPrixElement]; 
// generate the path, traverse the relationship call kRelationCommerce and 
// reach it's attribute name kNom 
NSString *predicateKey = [NSString stringWithFormat:@"%@.%@", kRelationCommerce, kNom]; 
// get an array out of one set probably not necessary 
NSArray *desPrixElementsAR = [desPrixElements allObjects]; 
NSMutableArray *lesPrixAAfficher = [[NSMutableArray alloc] initWithCapacity:0]; 
for (NSString *value in self.commercesNoms) { 
      // in a predicate with format %K MUST be the key or keyPath and 
      // %@ MUST be the value you are searching for 
      // the predicate here is done agains a many-to-one relation 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K MATCHES %@)", predicateKey, value]; 
      // Now I'm applying the predicate to the array 
    [lesPrixAAfficher addObjectsFromArray:[desPrixElementsAR filteredArrayUsingPredicate:predicate]]; 
} 

、あなたのモデルを設計しながら、考慮に入れるとあなたの要求をフェッチする必要があり、あなたがいる限り、それらの関係がto one関係しているように、多くの事業体を通じてキーパス関係に従うことができます事があります。
to-manyリレーションをトラバースするためにkeyPathを使用することはできません。なぜなら、Core Dataは、どのエンティティが従うべきかを知ることができるからです。
最後に、NSManagedObjectを取得したら、ドット記法を使用してそのプロパティとリレーションシップを取得できます。

+0

子要素の特定のキーを照会する方法はまだわかりません。コード例がありますか? – Maverick

+0

@Maverickいくつかのコード例では、フランス語の概念があれば、変数名に従う/理解するのに役立ちます。 –