わかりました、私は理解するのに何日も費やした非常にトリッキーな問題を抱えており、それを修正する方法がわからないことを知っています.
異なるコンテキストで別のスレッドから更新された 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
この疑似コードの例では、process1 と process2 は問題なく動作しますが、メイン スレッドが重複する更新イベントを受け取り、process3 が完了する前に process4 がデータベースの読み取りを開始することがあります。
それに対処する公式の方法はありますか?CoreData はこの状況に対する解決策を提供しますか、それとも NSLock を使用する必要がありますか?
ありがとう