0

私は、多くのView Controllerと、それぞれがCoreデータに基づいているプロジェクトに取り組んでいますUITableView. 保存に問題があります。テーブルを編集するときに、現在の情報とデータを保存する必要があります。次に、ユーザーが「保存」ボタンをタップすると、すべてがクラスに入るはずmasterContextですappDelegate(そのときだけ、masterContext に動的に保存できませんでした!)。

私の質問は次のとおりです。ユーザーが保存ボタンをタップして に渡した場合、現在のデータを保存するにはどうすればよいmasterContextですか? 作成temporaryContextしてからマージする必要がありmasterContextますか?

回答ありがとうございます。

4

1 に答える 1

0

あなたの質問に基づいて、複数のコンテキストを持つ必要はなく、それらの変更をマスターのものと共有します。異なるコントローラ間で共有するマスター コンテキストのみを使用してください。通常はこれでOKです。

ここでは、2 つのアプローチが有効です。

  • バトンを渡すアプローチ
  • コンテキストを取得できるシングルトン クラスを作成する

最初のアプローチは、一種の「コード インジェクション」として、コントローラー間でコンテキストを渡すことができることを意味します。

controller1.masterContext = [self masterContext];

masterContextstrongプロパティです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をご覧ください。

于 2013-01-04T09:22:08.503 に答える