ネストされたコンテキストの前は、次のような NSManagedObjects からいくつかの一般的な関数を宣言するのは簡単でした。
- awakeFromFetch
- awakeFromInsert
- 検証X
- didChangeValueForKey
試行錯誤を通じて、人生の教訓と呼んでください。エンティティで継承を使用するときは、これらの関数についてより注意することを学びました。
Core Data のネストされたコンテキスト部分にジャンプすると、まったく同じ NSManagedObject がいくつかのコンテキストに存在するのに慣れてきました。私はこれの重要な部分を把握しようとしています: 上記の関数は異なるコンテキストから複数回呼び出される可能性がありますが、検証、値の観察、初期化などは一度しか関連しません。したがって、私は通常、self.managedObjectContext が使用するメイン コンテキストに対応しているかどうかを確認します。それらが同じ場合は関数全体を実行し、そうでない場合は [super] を呼び出して戻ります。
それは、ネストされたコンテキストを処理する方法ですか?
これを行うことで、私は何度か救われました。同じオブジェクトに対して awakeFromInsert が複数回呼び出されたことに驚きましたが、メインのコンテキスト以外のすべてのコンテキストでその関数の初期化部分を中止しても、情報はストアに永続化されます。このトピックを正しい方法で扱っていることを確認したいと思います。
アップデート:
自分の考えを明確にするために、このトピックに関する記事をブログに書きました。私がそこに書いたことで、無効なエンティティ レイアウトやその他のエラーから何度か救われました。ただし、私よりも優れたアプローチがあるかどうかはわかりません。
http://www.digital-lumberjack.com/blog/2012/11/surviving-core-data/