0

問題:AddingManagedObjectContextの扱いにくい使用?

アプリはユニバーサルライブラリスタイルのCoreDataです。RootTableViewには、本のカテゴリリスト、フィクション、SFなどがあります。本の追加は、EditButtonを介して第2レベルのBookListTableViewで実行され、次に新しく表示される「+」ボタンを使用します。3番目のレベルは、本の詳細のテーブルビューを表示します。

ユーザーが第2レベルの「ブックリスト」ビューの「+」ボタンをタッチすると、ホームのブックリストビューで選択されたカテゴリがデフォルトでブックに含まれるようになっていることをすでに示しています。新しい本はメインMOCで不明なオブジェクトになり、挿入操作の開始時にaddingMOCに配置されます。ユーザーの希望するカテゴリ、たとえばSci-FiをmainMOCからaddingMOCに追加すると、保存時にエラーが発生することがわかりました。私が理解しているように、ManagedObjectは2つの異なるMOCに存在できないためです。

ユーザーの便宜のためにこのカテゴリの追加を実行したいので、次の回避策を実行します。同じカテゴリ名の新しい代用カテゴリを使用し、それを新しいブックのプロパティに追加します。

@property (nonatomic, retain) NSSet* categories;

したがって、編集モードのBooks Details Tableビューで、代用カテゴリオブジェクトの名前を表示できます。次に、ユーザーが[保存]ボタンをタッチすると、次の直前になります。

[self.addingManagedObjectContext save:&error]

objectIDを使用して、新しいブックから代用カテゴリを削除してから、addingManagedObjectContext自体から同じカテゴリを削除します。

次の方法でこのaddingMOC保存に従ってください。

NSNotificationCenter * dnc = [NSNotificationCenter defaultCenter]; [dnc addObserver:selfセレクター:@selector(addControllerContextDidSave :)名前:NSManagedObjectContextDidSaveNotificationオブジェクト:self.addingManagedObjectContext];

addMOCの新しいブック(カテゴリなし)がmainMOCにマージされます

次に、mainMOCの対応するカテゴリを新しい本に挿入し、mainMOCを保存してsaveActionを完了します。

これは私にとってはうまくいきますが、ぎこちなく感じます。誰かが私が間違っているところと私が欠けているものを説明できますか?この問題を処理するための正しくてエレガントなカカオの方法は何ですか?

ありがとう、マーク

4

1 に答える 1

1

管理対象オブジェクトは、複数の管理対象オブジェクトコンテキストに存在できます。または、特定のエンティティの同じインスタンスを表すより正確な管理対象オブジェクトは、複数のコンテキストに存在できます。

管理対象オブジェクトインスタンスをあるコンテキストから別のコンテキストに直接渡す場合、特にスレッドの境界を越える場合に問題が発生します。

管理対象オブジェクトを「渡す」正しい方法は、objectId代わりに渡すことです。

//Context 1
NSManagedObjectID *objectID = myObjectInContext1.objectID;

//Context 2
NSManagedObject *myObjectInContext2 = [self.managedObjectContext2 objectWithID:objectID];

または、2番目のコンテキストで永続ストアからカテゴリを再フェッチして、有効なカテゴリオブジェクトを取得し、他の値を渡して、これらのオブジェクトのどれを使用するかを示すこともできます(カテゴリIDやタイトルなど)。

于 2012-07-09T22:32:09.087 に答える