Ios CoreData无法实现故障

Ios CoreData无法实现故障,ios,core-data,nsmanagedobject,nsmanagedobjectcontext,Ios,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,我对CoreData和实现managedObjects有问题 堆栈跟踪: Uncaught exception: CoreData could not fulfill a fault for '0x11cec410 <x-coredata://08BF0B39-BA5D-404E-B75E-FD4FA906DE3E/TaskDescription/p1747>'. Stack trace: ( "4 libc++abi.dylib 0x03

我对CoreData和实现managedObjects有问题

堆栈跟踪:

Uncaught exception: CoreData could not fulfill a fault for '0x11cec410 <x-coredata://08BF0B39-BA5D-404E-B75E-FD4FA906DE3E/TaskDescription/p1747>'. Stack trace: (
"4   libc++abi.dylib                     0x03553f60 _ZSt11__terminatePFvvE + 14",
"5   libc++abi.dylib                     0x03553b97 __cxa_rethrow + 103",
"6   libobjc.A.dylib                     0x02cb0a57 objc_exception_rethrow + 47",
"7   CoreFoundation                      0x02f95bc5 CFRunLoopRunSpecific + 613",
"8   CoreFoundation                      0x02f9594b CFRunLoopRunInMode + 123"

我觉得很奇怪。如何防止此类NSObjectionaccessibleException?
我知道这个错误是由于以前删除的对象。我有很多后台上下文是异步运行的,但我认为我保留了苹果文档中关于CoreData并发性的规则。它只是偶尔会崩溃,从这一点上我看不到任何东西。有人有过类似的情况吗?

这与您提到的方法无关。
在多上下文环境中,如果有多个子上下文与同一父上下文(包括零父上下文),也无法避免此问题。

这可能发生在一个多上下文环境(或一些独特的情况下),其中一个上下文对某个对象(他认为存在)持有错误,但同时另一个上下文从存储中删除对象,而不通知删除的其他上下文(在保持故障尝试的上下文之前完成)。 在多上下文环境中使用FRC时,如果不使用父-子体系结构(其中FRC上下文是所有子上下文的父级),则始终容易受到此异常的影响。

有关更多用例,请参阅。

一个可能的解决方案是延迟FRC跟踪对象的实际删除:
首先将它们标记为删除(您的FRC谓词应该考虑到这个新属性)
然后使用后台操作删除标记为删除的对象(每个给定的时间间隔)

部分解决方案是使用父子上下文体系结构,通过FRC正在观察的上下文将所有事件漏斗化。

这是一个局部解决方案,因为这会将问题向上移动一个级别到不知道彼此删除的子上下文(如果子上下文从不并行处理相同的对象,则可以避免此问题).

您正试图对已删除的对象执行某些操作。在尝试使用该对象之前,请检查该对象是否已删除。我同意,但在主线程上合并coredata moc时会出现问题。即使尝试检查并忽略不再存在的对象(方法侦听ContextDidSaveNotification)问题发生在更高的地方。就像两个MOC处于一致状态,但都想删除对象。当第一次删除时,下一次是错误(当然是合并更改时)。在一个用例中,尝试取消FRC确实有帮助。但现在我遇到了一个情况,即没有FRC侦听,并且问题仍然存在:/n要使用多上下文核心数据而不出现任何错误是非常困难的。。当您有两个上下文包含(相同对象的)错误时其中一个提交删除,但不通知另一个上下文您有问题。最好的解决方案是延迟删除(首先将对象标记为“已删除”,稍后实际删除对象)。
 *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x11cec410 <x-coredata://08BF0B39-BA5D-404E-B75E-FD4FA906DE3E/TaskDescription/p1747>''
*** First throw call stack:
(
0   CoreFoundation                      0x02ff05e4 __exceptionPreprocess + 180
1   libobjc.A.dylib                     0x02cb08b6 objc_exception_throw + 44
2   CoreData                            0x0298666b _PFFaultHandlerLookupRow + 2715
3   CoreData                            0x02985bc7 -[NSFaultHandler fulfillFault:withContext:forIndex:] + 39
4   CoreData                            0x029857a3 _PF_FulfillDeferredFault + 259
5   CoreData                            0x029855f6 _sharedIMPL_pvfk_core + 70
6   CoreData                            0x0298a005 -[NSManagedObject(_PFDynamicAccessorsAndPropertySupport) _genericValueForKey:withIndex:flags:] + 85
7   CoreData                            0x029c3ab1 _PF_Handler_Public_GetProperty + 161
8   CoreData                            0x029c39b5 -[NSManagedObject valueForKey:] + 149
9   Foundation                          0x0254e065 -[NSFunctionExpression expressionValueWithObject:context:] + 1260
10  Foundation                          0x025d4109 -[NSComparisonPredicate evaluateWithObject:substitutionVariables:] + 248
11  Foundation                          0x025d4009 -[NSPredicate evaluateWithObject:] + 48
12  CoreData                            0x02a8f991 -[NSFetchedResultsController(PrivateMethods) _objectInResults:] + 113
13  CoreData                            0x02a912c2 -[NSFetchedResultsController(PrivateMethods) _preprocessUpdatedObjects:insertsInfo:deletesInfo:updatesInfo:sectionsWithDeletes:newSectionNames:treatAsRefreshes:] + 642
14  CoreData                            0x02a926f4 -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 1892
15  Foundation                          0x02622e39 __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke + 40
16  CoreFoundation                      0x0304c524 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 20
17  CoreFoundation                      0x02fa407b _CFXNotificationPost + 2859
18  Foundation                          0x0255cb91 -[NSNotificationCenter postNotificationName:object:userInfo:] + 98
19  CoreData                            0x029974a3 -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 83
20  CoreData                            0x02a36abf -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:] + 367
21  CoreData                            0x02993168 -[NSManagedObjectContext(_NSInternalChangeProcessing) _postRefreshedObjectsNotificationAndClearList] + 136
22  CoreData                            0x02992d14 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 3140
23  CoreData                            0x029920c9 -[NSManagedObjectContext processPendingChanges] + 41
24  CoreData                            0x02966311 _performRunLoopAction + 321
25  CoreFoundation                      0x02fb853e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
26  CoreFoundation                      0x02fb848f __CFRunLoopDoObservers + 399
27  CoreFoundation                      0x02f963b4 __CFRunLoopRun + 1076
28  CoreFoundation                      0x02f95b33 CFRunLoopRunSpecific + 467
29  CoreFoundation                      0x02f9594b CFRunLoopRunInMode + 123
30  GraphicsServices                    0x0488d9d7 GSEventRunModal + 192
31  GraphicsServices                    0x0488d7fe GSEventRun + 104
32  UIKit                               0x016c294b UIApplicationMain + 1225
33  MYAPP                              0x0003bb9d main + 141
34  MYAPP                              0x00003055 start + 53
)
libc++abi.dylib: terminating with uncaught exception of type _NSCoreDataException
NSFetchedResultsController(PrivateMethods)
NSManagedObjectContext(_NSInternalChangeProcessing)