セットアップ:
(iPhone アプリケーションで) 2 つのマネージド コンテキストをセットアップしています。ほとんどのクエリに使用するメイン コンテキストと、バックグラウンドで発生させたい長時間実行操作に使用するバックグラウンド コンテキストです。
各管理対象オブジェクト コンテキストに対して NSManagedObjectContextDidSaveNotification の通知をセットアップしました。通知に応じて、mergeChangesFromContextDidSaveNotification を呼び出して同期します。また、メイン コンテキストで状況が変化するたびに、バックグラウンド コンテキストでいくつかのジョブを実行する必要があることも要件です。これは、物事の状態が変化したためです。
コンテキストの 1 つだけに書き込む限り、これは正常に機能します。この場合、メイン コンテキストに書き込みます。ただし、バックグラウンド コンテキストで記述すると、無限ループが発生します。バックグラウンド コンテキストに保存すると、メイン コンテキストへの通知がトリガーされます。メイン コンテキストは、変更をマージし、バックグラウンド コンテキストによって取得された独自の通知を起動します。これにより、バックグラウンド コンテキストがバックグラウンド ジョブを実行するようにトリガーされ、(何かを書き込む場合) サイクルが再び開始されます。
これは間違った設定であるか、「メインコンテキストで何かが変更されるたびにバックグラウンドジョブの処理を開始する」を変更通知から切り離す方法が必要か、またはバックグラウンドコンテキストを読み取り専用にする必要があるようです。
アイデア?典型的な「2 番目のコンテキストはインポート用」のシナリオとは異なり、バックグラウンド コンテキストをメイン コンテキストに関して最新の状態に保つ必要がある/望んでいると考えているため、バックグラウンドから適切な結果が得られます。仕事。