コアデータを使用したiphone/ipadアプリケーションがあります。 データは、さまざまなWebサービスコールを介して提供されます。 私は情報を最新の状態に保つために、ポーリングメカニズムを使用して、サービスコールのそれぞれがいつ行われるかを決定します。 このように、複数のMOCを使用してこれらの呼び出しからのデータを処理する複数のバックグラウンドスレッドが非常によくあるかもしれません。挿入と更新の場合、このアプローチはうまく機能します。 削除機能を実装しようとすると、プログラムがクラッシュします。これは、削除されたオブジェクトにフォールトが発生しているため、あるスレッドのコンテキストが別のスレッドも処理している管理対象オブジェクトを削除した場合に発生していると考えられます。複数の背景スレッドを持つコアデータ
私は解決策をオンラインで探していましたが、特に何かに着手していませんでした。 削除をメインスレッドのコンテキストにプッシュする必要がありますか?すべての処理を行うためにシングルスレッドとそれに付随するMOCをシングルトンで維持するのはどうでしょうか?
ご協力いただきありがとうございます。
AppDelegate didFinishLaunchingWithOptionsメソッドで: [[NSNotificationCenter defaultCenter] addObserver:自己セレクタ:@selector(changesSaved :) name:NSManagedObjectContextDidSaveNotificationオブジェクト:なし];
これは、呼び出し:
- (ボイド)changesSaved:(NSNotification *)注 {[自己performSelectorOnMainThread:@selector(changesSavedOnMainThread :) withObject:waitUntilDone注意:YES]を。 }
最後に、
- (ボイド)changesSavedOnMainThread:(NSNotification *)注 {\t IF([ノートオブジェクト]!= __managedObjectContext)[__managedObjectContext mergeChangesFromContextDidSaveNotification:note]; } – flizit
申し訳ありませんが、上記のコメントはひどいです。とにかく、私は理論的にメインスレッドを可能な限りフリーに保つために、この処理をバックグラウンドにしました。私は間違いなく、メインスレッドでの処理とバックグラウンドでの処理のどちらがパフォーマンスにどのような影響を与えるかを見て調整することができます。 – flizit