7

一般的に NSObjectInaccessbileExceptions について理解し、別のマネージド コンテキスト/スレッドで削除されたオブジェクトで障害を起こさないようにする必要があることを理解しています。

しかし、私のユーザー クラッシュ レポートでは、子 NSManagedObjectContext をバックグラウンド スレッド (B) からメイン コンテキスト (A) にマージ/保存しているときに NSObjectInaccessibleException が発生しています。これは異常なシナリオのようです。

そのようなことを引き起こす可能性があると私が想像できる唯一の状況は次のとおりです。

  1. スレッド/コンテキスト内のオブジェクトのプロパティを変更 (B)
  2. スレッド/コンテキスト A のオブジェクトを削除
  3. 保存コンテキスト A
  4. 保存コンテキスト B
  5. A を B にマージして A を保存 -> オブジェクトが A に存在しないために発生した例外。

このようなコンテキストを保存しているときに、他の誰かが例外を見たことがありますか? これを手動で再現しようとしましたが、失敗しました。これが発生する可能性のある他のシナリオはありますか?また、そのような問題に対処するためのヒントはありますか?

ありがとう!

Fatal Exception
NSObjectInaccessibleException
CoreData could not fulfill a fault for '0x1f019da0 <x-coredata://741E65A8-C211-470E-8194-3005F0DFA71C/TrackInfo/p265>'
0   CoreFoundation  __exceptionPreprocess + 162
1   libobjc.A.dylib     objc_exception_throw + 30
2   CoreData    _PFFaultHandlerLookupRow + 1482
3   CoreData    -[NSFaultHandler fulfillFault:withContext:] + 24
4   CoreData    -[NSManagedObject(_NSInternalMethods) _updateFromRefreshSnapshot:includingTransients:] + 236
5   CoreData    -[NSManagedObjectContext(_NestedContextSupport) _copyChildObject:toParentObject:fromChildContext:] + 96
6   CoreData    -[NSManagedObjectContext(_NestedContextSupport) _parentProcessSaveRequest:inContext:error:] + 918
7   CoreData    __82-[NSManagedObjectContext(_NestedContextSupport) executeRequest:withContext:error:]_block_invoke_0 + 564
8   libdispatch.dylib   _dispatch_barrier_sync_f_slow_invoke + 96
9   libdispatch.dylib   _dispatch_client_callout + 22
10  libdispatch.dylib   _dispatch_main_queue_callback_4CF + 228
11  CoreFoundation  __CFRunLoopRun + 1288
12  CoreFoundation  CFRunLoopRunSpecific + 356
13  CoreFoundation  CFRunLoopRunInMode + 104
14  GraphicsServices    GSEventRunModal + 74
15  UIKit   UIApplicationMain + 1120
16  app    main.m line 13    main
17  app    start 
4

1 に答える 1