核心数据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个线程内创建和使用。希望这可以帮助任何可能遇到此问题的人,因为调试信息不是很清楚!
答
的 “numberAttr” 就像声明为保留财产,所以当你改变它的值来引用一个不同的NSNumber对象时,以前的NSNumber对象将被发送一个释放消息。如果之前的对象已经被释放,我会期望看到这种行为。
你有其他地方,你正在设置“numberAttr”?在这里更改属性之前是否有可能已经发布了其中一个NSNumber对象?
+1为答案,因为它帮助我解决了我的问题。在我的情况下,由主要上下文创建的NSManagedObject被用在背景上下文中,这显然是错误的。 – nagan 2015-05-07 10:15:55