NSManagedObjectContext processPendingChanges期间核心数据崩溃

时间:2010-02-03 04:07:22

标签: cocoa core-data

我正在使用Core Data获得一个(在我看来很奇怪)。 从我可以收集到的内容中,当Core Data执行保存并触发后续的managedObjectContextDidSave方法时,就会发生这种情况。

我很茫然,希望有人可以帮助我或指导我朝着正确的方向前进。

崩溃报告如下:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000b
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x000026f4 objc_msgSend + 16
1   Foundation                      0x000437a4 NSClassFromObject + 8
2   Foundation                      0x0000ba54 _NSIMPForObjectAndSelector + 4
3   Foundation                      0x00095eae -[NSSortDescriptor compareObject:toObject:] + 110
4   CoreData                        0x000b0a6e +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:] + 174
5   CoreData                        0x000b1496 -[NSFetchedResultsController(PrivateMethods) _postprocessInsertedObjects:] + 342
6   CoreData                        0x000b32d6 -[NSFetchedResultsController(PrivateMethods) _postprocessUpdatedObjects:] + 430
7   CoreData                        0x000b2a5e -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 498
8   Foundation                      0x0004bbf6 _nsnote_callback + 162
9   CoreFoundation                  0x00050af2 _CFXNotificationPostNotification + 298
10  Foundation                      0x000497f4 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
11  CoreData                        0x0002e42e -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 66
12  CoreData                        0x0007fd26 -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:] + 134
13  CoreData                        0x0001670a -[NSManagedObjectContext(_NSInternalChangeProcessing) _postRefreshedObjectsNotificationAndClearList] + 70
14  CoreData                        0x000164ac -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 1656
15  CoreData                        0x0004b5fa -[NSManagedObjectContext processPendingChanges] + 10
16  CoreData                        0x0003e2a4 _performRunLoopAction + 120
17  CoreFoundation                  0x0000fb50 __CFRunLoopDoObservers + 420
18  CoreFoundation                  0x00056a32 CFRunLoopRunSpecific + 1734
19  CoreFoundation                  0x00056356 CFRunLoopRunInMode + 42
20  GraphicsServices                0x00003cb8 GSEventRunModal + 108
21  GraphicsServices                0x00003d64 GSEventRun + 56
22  UIKit                           0x00002768 -[UIApplication _run] + 384
23  UIKit                           0x0000146c UIApplicationMain + 688
24  MyApp                           0x000022d2 main (main.m:14)
25  MyApp                           0x00002248 start + 44

2 个答案:

答案 0 :(得分:1)

看起来你的一个数据库数组中的一个项目被释放了太多次(因此被释放)。尝试对数组进行排序,与已解除分配的对象进行比较时崩溃了。

尝试使用NSZombieEnabled运行程序 - 它会阻止重新分配,以便您可以看到哪个对象正在使用保留计数0来发送消息。

答案 1 :(得分:1)

如果您使用的是NSFetchedResultsController,则该代码中可能存在错误,并且不容易看到。我建议在NSFetchedResultsController委托方法中添加一些日志语句,并观察哪一个被触发。

由于NSFRC是作为NSManagedObjectContext的保存例程的一部分触发的,因此其委托中的错误很容易被误解为保存本身中的错误。

更新1

如果是约会,那么也许当你在某个地方设定那个日期时,你自己过度释放它?也许在-release上拨打[NSDate date]。在Core Data尝试访问日期对象之前,这种类型的错误将被隐藏。