CoreData无法解决问题

时间:2014-02-17 14:23:27

标签: ios core-data nsmanagedobject nsmanagedobjectcontext

我遇到CoreData问题并完成了托管对象。

堆栈追踪:

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"

 *** 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

我只能在显示一些内部CoreData / Foundation指令的情况下看到应用程序崩溃时的所有内容。任何人都可以解释我,这是怎么回事

NSFetchedResultsController(PrivateMethods)

NSManagedObjectContext(_NSInternalChangeProcessing)

对我来说这看起来很奇怪。我怎样才能防止出现这样的NSObjectInaccessibleException? 我知道这个错误是由于先前删除的对象造成的。我有许多背景上下文异步运行,但我认为我遵守Apple文档中关于CoreData并发性的规则。它有时只会崩溃,从这一点上我看不到任何东西。有人有类似的情况吗?

1 个答案:

答案 0 :(得分:2)

这与你提到的方法无关 您也无法在多上下文环境中避免此问题,在该环境中,您有多个具有相同父级的子上下文(包括nil父级)。

这可能发生在多上下文环境(或一些独特的情况)中,其中一个上下文为某个对象(他认为存在)存在错误,但同时另一个上下文从存储中删除该对象而不通知删除的另一个上下文(在上下文中持有故障试图实现它。

在多上下文环境中使用FRC,它不使用父级子系统架构,其中FRC上下文是所有子上下文的父级,将始终容易受到此异常的影响。

有关更多用例,请参阅HERE

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

部分解决方案是使用父子上下文架构,通过FRC观察的上下文汇集所有事件。
这是一个部分解决方案,因为这会将问题从一个级别移到不知道彼此删除的子上下文(如果子上下文从不并行处理相同的对象,那么您可以避免这个问题)。