NSManagedObjectContextで競合状態が発生しています。NSManagedObjectContext のロックを使用してこれを防止するさまざまな方法を試していました。Appleが提案しているように、dispatch_syncを使用する方がより良いアプローチのようです。しかし、(dispatch_sync を使用して実行されるブロックの下で使用されている) オブジェクトが2 つの異なるスレッドからアクセスされないように保存できるかどうかを判断できません。
これは、私が尋ねようとしていることのより明確な図です。
[[*Some Singleton class* instance].managedObjectContext executeFetchRequest:request error:&err];
// After fetching results do something in DB
上記のコードが、次のように dispatch_sync を使用して実行されるブロックに渡されるとしましょう:
dispatch_sync(someConcurrentQueue, ^{
[[*Some Singleton class* instance].managedObjectContext executeFetchRequest:request error:&err];
// After fetching results do something in DB
});
このブロックが完全に実行される前に、他のスレッドは [いくつかのシングルトン クラスインスタンス].managedObjectContext にアクセスできますか。
私の知る限り、アクセスできます。これが本当なら、この競合状態を防ぐ唯一の方法は NSManagedObjectContext にロックを適用することですか?