あなたの質問に基づいて、複数のコンテキストを持つ必要はなく、それらの変更をマスターのものと共有します。異なるコントローラ間で共有するマスター コンテキストのみを使用してください。通常はこれでOKです。
ここでは、2 つのアプローチが有効です。
- バトンを渡すアプローチ
- コンテキストを取得できるシングルトン クラスを作成する
最初のアプローチは、一種の「コード インジェクション」として、コントローラー間でコンテキストを渡すことができることを意味します。
controller1.masterContext = [self masterContext];
はmasterContext
のstrong
プロパティですcontroller1
。
2 番目のアプローチは、Core Data スタック (通常はアプリケーション デリゲート) を設定するクラスでreadonly property
、コンテキストにアクセスできる を提供することを意味します。save
コンテキストを保存するメソッドを提供することもできます。すべての設定コードをアプリケーション デリゲートに入れるのはあまり好きではないので、通常はこの目的のためにシングルトン クラスを作成します。DCTCoreDataStackはこの例です。
@MarcusZarra in PASSING AROUND A NSMANAGEDOBJECTCONTEXT ON IOSも、コンテキストを渡すためのいくつかのテクニックを示しています。
興味がある場合は、Core Data で新しい iOS 5 API を使用して、プライベート キューで動作するマスター コンテキスト ( NSPrivateQueueConcurrencyType
) とメイン スレッドで動作する子コンテキスト ( ) をセットアップすることもできますNSMainQueueConcurrencyType
。これは親子コンテキストと呼ばれます。メイン スレッドで行われた変更はマスターに渡され、変更が CD ストアに保存されます。ここにいくつかのメモがあります。コア データ リリース ノート. さらに、完全な説明については、Multi-Context CoreDataをご覧ください。