核心数据Malloc错误

问题描述:

我注意到我在应用程序的随机点出现一些错误。我有2个错误,“双重释放”和“释放对象的校验和不正确”。这里有一个“双免费”错误的堆栈跟踪。谁能提供任何见解?它发生在我的代码中的一个调用中,它只是将一个属性设置为NSNumber,所以我不明白为什么它会这样做!核心数据Malloc错误

myObject.numberAttr = [NSNumber numberWithInt:[dateComponents day]]; 

随机触发(并不总是发生):

#0 0x9585b072 in malloc_error_break 
#1 0x9585c218 in szone_error 
#2 0x9585c34d in free_tiny_botch 
#3 0x01c5e064 in _PFDeallocateObject 
#4 0x01c97e2b in -[NSManagedObject(_NSInternalMethods) _setLastSnapshot__:] 
#5 0x01c97a0d in -[NSManagedObjectContext(_NSInternalChangeProcessing) _establishEventSnapshotsForObject:] 
#6 0x01c97866 in _PFFastMOCObjectWillChange 
#7 0x01c976c5 in _PF_ManagedObject_WillChangeValueForKeyIndex 
#8 0x01c97525 in _sharedIMPL_setvfk_core 
#9 0x01c9b827 in _svfk_5 

非常感谢,

迈克尔

我想通了!事实证明,这是我的托管对象上下文的线程问题。我在主线程上创建它,并在后台线程中使用它。但是,似乎上下文必须在1个线程内创建和使用。希望这可以帮助任何可能遇到此问题的人,因为调试信息不​​是很清楚!

+0

+1为答案,因为它帮助我解决了我的问题。在我的情况下,由主要上下文创建的NSManagedObject被用在背景上下文中,这显然是错误的。 – nagan 2015-05-07 10:15:55

的 “numberAttr” 就像声明为保留财产,所以当你改变它的值来引用一个不同的NSNumber对象时,以前的NSNumber对象将被发送一个释放消息。如果之前的对象已经被释放,我会期望看到这种行为。

你有其他地方,你正在设置“numberAttr”?在这里更改属性之前是否有可能已经发布了其中一个NSNumber对象?