我一般了解NSObjectInaccessbileExceptions,并且需要避免尝试在另一个托管上下文/线程中删除的对象中出错.
但是,在我的用户崩溃报告中,我在将后台线程(B)中的子NSManagedObjectContext合并/保存到我的主上下文(A)时看到了NSObjectInaccessibleException,这看起来像是一个不寻常的场景.
我可以想象的唯一可能导致这种情况的情况如下:
>在线程/上下文中更改对象的属性(B)
>删除线程/上下文中的对象A.
>保存上下文A.
>保存上下文B.
>将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
解决方法
在创建子上下文时,您可以尝试使用以下行:
privateManagedObjectContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy