私はそれを修正する方法がわかりません。NSManagedObjectContextDidSaveNotificationイベントをオーバーラップさせないようにする
異なるコンテキストの異なるスレッドからCoreDataデータベースを更新しました。私の問題は時々NSManagedObjectContextDidSaveNotificationイベントが重複し、クラッシュにつながるベースの破損を作成することです。次に例を示します。
Thread Main NSFetchResultsController
Update database
Save database NSManagedObjectContextDidSaveNotification1
merge delegate process 1
process 1 done
Update database
Save database NSManagedObjectContextDidSaveNotification2
merge delegate process 2
process 2 done
Update database
Save database NSManagedObjectContextDidSaveNotification3
merge delegate process 3
Update database
Save database NSManagedObjectContextDidSaveNotification4
merge
process 3 done
delegate process 4
CRASH
process 4 done
この擬似コード例のプロセス1とプロセス2が問題 せずに動作しますが、時には、メインスレッドが更新イベントが重複して あなたがprocess3が行われる前に、データベースを読み始めprocess4ている受信で。
これに対処する正式な方法はありますか? CoreDataはこの状況に対して の解決策を提供していますか、NSLockを使用する必要がありますか?
おかげ
マージ通知を処理するコードの部分を投稿できますか?それがなければ誰も推測できないと思う。私が答えて言ったように、コンテキストは永続的なストアコーディネーターを連動させてアクセスを連鎖させてしまうので、こうした問題を防ぐことができます。 – paulbailey