我的应用收到核心数据保存的崩溃。以下是Stack:
#0 0x01646725 in _PFObjectIDFastEquals64 ()
#1 0x018aba17 in __CFDictionaryEquateKeys ()
#2 0x018f0967 in ___CFBasicHashFindBucket_Linear ()
#3 0x017fb9ab in CFBasicHashSetValue ()
#4 0x017fb799 in CFDictionarySetValue ()
#5 0x0163cab3 in _PFCMT_SetValue ()
#6 0x01668d68 in -[NSManagedObjectContext(_NSInternalAdditions) _changeIDsForManagedObjects:toIDs:] ()
#7 0x0167aaff in -[NSSQLCore commitChanges:] ()
#8 0x0166e070 in -[NSSQLCore saveChanges:] ()
#9 0x0162c199 in -[NSSQLCore executeRequest:withContext:error:] ()
#10 0x016dc70b in -[NSPersistentStoreCoordinator executeRequest:withContext:error:] ()
#11 0x01664948 in -[NSManagedObjectContext save:] ()
#12 0x000c8ee4 in -[SensorController performDataRecord] (self=0x69633d0, _cmd=0x27eaa4) at SensorController.m:760
#13 0x01d7cefc in -[NSObject(NSThreadPerformAdditions) performSelector:onThread:withObject:waitUntilDone:modes:] ()
#14 0x01d8f506 in -[NSObject(NSThreadPerformAdditions) performSelectorOnMainThread:withObject:waitUntilDone:] ()
#15 0x000c8d60 in -[SensorController recordData] (self=0x69633d0, _cmd=0x27eab6) at SensorController.m:744
#16 0x01d94749 in __NSFireTimer ()
#17 0x018ba8c3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#18 0x018bbe74 in __CFRunLoopDoTimer ()
#19 0x018182c9 in __CFRunLoopRun ()
#20 0x01817840 in CFRunLoopRunSpecific ()
#21 0x01817761 in CFRunLoopRunInMode ()
#22 0x027cc1c4 in GSEventRunModal ()
#23 0x027cc289 in GSEventRun ()
#24 0x007b6c93 in UIApplicationMain ()
#25 0x00083801 in main (argc=1, argv=0xbffff60c) at main.m:50
使用非主线程上下文将数据插入到线程中。这种情况只发生在不常见的场合,但经常在长时间使用后经常发生故障。从堆栈中可以看出,我正在主线程上执行保存,并等待它完成。
另外,作为预防措施,我在保存前查看上下文。
最后,上下文设置为保留对象:
[context setRetainsRegisteredObjects:YES];
非常感谢任何帮助。
答案 0 :(得分:3)
继续下去但你应该保存在插入/更新对象的同一个线程上。
当商店试图改变对象ID时,看起来崩溃正在发生。这反过来表明您可能有两个或更多实例化对象键入同一商店表示。
答案 1 :(得分:1)
根据我的经验,EXC_BAD_ACCESS总是来自尝试触摸已释放或已释放的变量。尝试检查内存泄漏,或者它正在爆炸的区域已经考虑到了所有内容。