我正在使用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
答案 0 :(得分:1)
看起来你的一个数据库数组中的一个项目被释放了太多次(因此被释放)。尝试对数组进行排序,与已解除分配的对象进行比较时崩溃了。
尝试使用NSZombieEnabled运行程序 - 它会阻止重新分配,以便您可以看到哪个对象正在使用保留计数0来发送消息。
答案 1 :(得分:1)
如果您使用的是NSFetchedResultsController,则该代码中可能存在错误,并且不容易看到。我建议在NSFetchedResultsController委托方法中添加一些日志语句,并观察哪一个被触发。
由于NSFRC是作为NSManagedObjectContext的保存例程的一部分触发的,因此其委托中的错误很容易被误解为保存本身中的错误。
如果是约会,那么也许当你在某个地方设定那个日期时,你自己过度释放它?也许在-release
上拨打[NSDate date]
。在Core Data尝试访问日期对象之前,这种类型的错误将被隐藏。