合并子上下文时的NSObjectInaccessbileExceptions

时间:2013-09-10 15:08:00

标签: ios core-data

我一般了解NSObjectInaccessbileExceptions,并且需要避免尝试在另一个托管上下文/线程中删除的对象中出错。

但是,在我的用户崩溃报告中,我在将后台线程(B)中的子NSManagedObjectContext合并/保存到我的主上下文(A)时看到了NSObjectInaccessibleException,这看起来很不寻常。

我能想象的唯一可能导致这种情况的情况如下:

  1. 在线程/上下文中更改对象的属性(B)
  2. 删除线程/上下文中的对象A
  3. 保存上下文A
  4. 保存上下文B
  5. 将A合并到B并保存A - >引发异常,因为A中不存在对象。
  6. 有没有其他人在保存这样的上下文时遇到异常?我尝试手动重现,但失败了。是否有其他情况可能发生这种情况,是否有处理此类问题的提示?

    谢谢!

    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 
    

1 个答案:

答案 0 :(得分:0)

您可以在创建子上下文时尝试使用以下行:

privateManagedObjectContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy