これによると、親/子コンテキストよりもパフォーマンスが優れていることを理解しているため、同じNSPersistentStoreCoordinatorを共有する従来の複数のMOCを使用しています:
http://floriankugler.com/blog/2013/4/29/concurrent-core-data-stack -パフォーマンスシュートアウト
コンテキストの作成と、それらを作成するスレッド/キューでの使用には細心の注意を払っています。
デッドロックはこれです:
メイン スレッドがフェッチ要求を実行しており、[NSManagedObjectContext executeFetchRequest:error:] のミューテックスでハングしています。
#0 0x3ad840fc in __psynch_mutexwait ()
#1 0x3accd128 in pthread_mutex_lock ()
#2 0x328eee90 in -[_PFLock lock] ()
#3 0x328ff350 in -[NSPersistentStoreCoordinator executeRequest:withContext:error:] ()
#4 0x328fdf16 in -[NSManagedObjectContext executeFetchRequest:error:] ()
[coordinator managedObjectIDForURIRepresentation:objector] を呼び出す前に、永続ストア コーディネーターに設定したロックでバックグラウンド スレッドがハングしています。
#0 0x3ad840fc in __psynch_mutexwait ()
#1 0x3accd128 in pthread_mutex_lock ()
#2 0x328eee90 in -[_PFLock lock] ()
#3 0x00093180 in -[DataManager getObjectByUri:context:]
これを投稿からデバッグするのは難しいことを理解していますが、どんなアイデアでも大歓迎です。ところで...これはめったに起こりません。