2016-07-27 5 views
0

コアデータのプライベート/内部メソッドでランダムに発生するまれなクラッシュがあります。コアデータクラッシュ中にmergeChangesFromContextDidSaveNotification

マイセットアップ:

  • 2 NSPSC:mainPSCとimportPSC
  • がimportPSCに添付MOCは バックグラウンドで実行され、
  • 別の目的は、 DidSaveNotificationに耳を傾け、その後mainMOC とimporterMOCを(マージを保存実行メインPSCに添付)

これはすべてiOS 9.3です。 これは(それは私のライブラリーRTCoreDataStackからだ)メインスレッドで実行されるコードです:

[self.mainManagedObjectContext performBlock:^{ 
    [self.mainManagedObjectContext mergeChangesFromContextDidSaveNotification:notification]; 
}]; 

私はクラッシュレポート内のさまざまなコード(デバイス上のシミュレータやSIGSEGVのEXC_I386_GPFLT)とEXC_BAD_ACCESSを取得します。ここでは一例だ:

Thread 0 Crashed: 
0 libobjc.A.dylib      0x0000000180eedb90 objc_msgSend + 16 
1 CoreData        0x0000000183773010 -[NSManagedObjectContext _mergeRefreshObject:mergeChanges:withPersistentSnapshot:] + 132 
2 CoreData        0x00000001837745fc -[NSManagedObjectContext _mergeChangesFromDidSaveDictionary:usingObjectIDs:] + 2276 
3 CoreData        0x000000018377cd04 __90+[NSManagedObjectContext(_NSCoreDataSPI) _mergeChangesFromRemoteContextSave:intoContexts:]_block_invoke1353 + 68 
4 CoreData        0x000000018377508c developerSubmittedBlockToNSManagedObjectContextPerform + 192 
5 CoreData        0x0000000183774f54 -[NSManagedObjectContext performBlockAndWait:] + 216 
6 CoreData        0x000000018377c698 +[NSManagedObjectContext(_NSCoreDataSPI) _mergeChangesFromRemoteContextSave:intoContexts:] + 3420 
7 CoreData        0x0000000183774bb0 -[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 384 
8 RTCoreDataStack      0x00000001005e8d34 __43-[RTCoreDataManager handleMOCNotification:]_block_invoke (RTCoreDataManager.m:294) 
9 CoreData        0x000000018377508c developerSubmittedBlockToNSManagedObjectContextPerform + 192 
10 libdispatch.dylib     0x00000001812c147c _dispatch_client_callout + 12 
11 libdispatch.dylib     0x00000001812c6b84 _dispatch_main_queue_callback_4CF + 1840 
12 CoreFoundation      0x000000018182cd50 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8 
13 CoreFoundation      0x000000018182abb8 __CFRunLoopRun + 1624 
14 CoreFoundation      0x0000000181754c50 CFRunLoopRunSpecific + 380 
15 GraphicsServices      0x000000018303c088 GSEventRunModal + 176 
16 UIKit        0x0000000186a3e088 UIApplicationMain + 200 
17 MyApp       0x0000000100131910 main (main.m:14) 
18 ???         0x00000001812f28b8 0x0 + 0 

答えて

0

種類の魂はあなたがNSMOのプロパティを監視するためにKVOを使用している際にクラッシュし、これらの種類が発生している可能性の方に私を指摘しました。

最初は自分のKVOコードをFacebookのKVOControllerに置き換えようとしましたが、それは役に立ちませんでした。その後、私はKVOを完全に取り外し、クラッシュがなくなりました。

最初の結論は、DidSaveNotificationでマージしている間にストアから削除されたオブジェクトに対してKVOがセットアップされたときに、がクラッシュすることです。

さらに、私の場合、KVO自体だけでなく、KVO-edオブジェクトがproperty(assign)に設定されたNSSetに追加されたという事実もあります。私は現在KVO + strongのリファレンスをテストしています。

関連する問題