2009-09-16 13 views
7

一連のデータをCoreData persistentStoreにインポートしようとしています。これは、実行時にユーザーに提示される読み取り専用のデータです。CoreData 1対多および逆関係の問題

"Item"というエンティティと1対多の関係を持ち、カテゴリと逆の関係にある "カテゴリ"というエンティティがあります。

アイテムをコンテキストに追加すると、それらを正しいカテゴリにどのように関連付けるのですか? SQLite dBでは、ItemテーブルにCategoryフィールドを追加することによってそれが行われ、おそらくカテゴリの主キーが関係に使用されることがわかります。しかしPKは背後にあります...接続する方法はありますか?

私もアイテムを追加するためのCoreDataによって生成された方法があるというのが私のCategoryクラスで参照が、私は、これらはCoreDataは関係を維持することができALOS舞台裏方法であると仮定しています:

@interface Category (CoreDataGeneratedAccessors) 

- (void)addItemObject:(Item *)value; 
- (void)removeItemObject:(Item *)value; 
- (void)addItems:(NSSet *)value; 
- (void)removeItems:(NSSet *)value; 

@end 

CoreDataが関係のもう一方の面を自動的に処理するというプログラミングガイドを読みましたが、項目を追加するとカテゴリへの最初のリンクをどうやって行うのか分かりません。

おかげ

JK

答えて

9

異なる可能性があります。あなたは既に(例えばフェッチ要求を介して得られる)Categoryオブジェクトを持っている、そしてあなたは、単に以下のない変数

Category *category; 
Item *item; 

を想定した場合:

item.category = category; 

または

[category setValue: category forKey:@"category"]; 

コアデータは自動的に逆の関係を設定するので、完了します。

あなたはCategoryオブジェクトを持っていない、または新しいものを挿入する、次の手順を実行している場合:

// Create a new instance of the entity 
Category *category = (Category *) [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext]; 
// add all of the category properties, then set the relationship 
// for instance set the category name 
[category setValue:@"myCategoryName" forKey:@"name"]; 
[category setValue:item forKey:@"item"]; 

次に、あなたのアイテムのオブジェクトに対してこのカテゴリーのオブジェクトは、正確に前と同じように設定します。

[category addItemObject:item]; 

または逆:

[item addCategoryObject:category]; 
は最後に、あなたがコアデータによって背後で使用されていませんが示されている方法:あなたも次の操作を行うことができるように、これらの方法は、あなたにご利用いただけます
+0

ありがとう、Unforgiven。私は別の掲示板の別の投稿から既にこのことのほとんどを理解していましたが、あなたの答えは鐘のようにはっきりしています。ウィッシュアップルのドキュメントが良かった!今、私は特定のカテゴリのアイテムを取得する方法を学ぶ必要があり、私は自宅無料です! jk – Alpinista

+1

Itemエンティティからオブジェクトをフェッチするために使用するフェッチ要求にNSPredicateを関連付ける必要があります。カテゴリエンティティがプロパティとしてカテゴリの名前を格納している場合は、ItemからCategoryへの一対一の関係を使用します。NSPredicate *述語= [NSPredicate predicateWithFormat:@ "category.name LIKE%@"、yourCategoryNameStringHere]; このエンティティを、Itemエンティティからオブジェクトをフェッチするために使用するフェッチ要求に単に関連付けるだけです。 –

+1

もう一度、Unforgivenに感謝します。 私は、あなたが他の方向から行くこともできることを発見しました。あなたがCategoryを持っているなら、Categorie's ItemsプロパティのNSSetからItemsの配列を得ることができます。 – Alpinista

関連する問題