2009-11-22 6 views
0

Я заметил, что получаю несколько ошибок в случайных точках в своем приложении. У меня было 2 ошибки: «double free» и «неправильная контрольная сумма для освобожденного объекта». Heres трассировка стека «двойной свободной» ошибки. Может ли кто-нибудь дать представление? Это происходит при вызове в моем коде, который просто устанавливает атрибут NSNumber, поэтому я не могу понять, почему он это делает!Core Data 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 

Большое спасибо,

Майкл

ответ

3

Я понял! Оказывается, это была проблема с потоком с моим контекстом управляемых объектов. Я создавал его на основном потоке и использовал его в фоновом потоке. Однако, казалось бы, контекст должен быть создан и использоваться все в пределах 1 потока. Надеюсь, это поможет кому-то еще, кто может столкнуться с этой проблемой, поскольку отладочная информация не очень ясна!

+0

+1 для ответа, так как это помогло мне решить мою проблему. В моем случае NSManagedObject, созданный главным контекстом, использовался в фоновом контексте, который явно ошибочен. – nagan

1

"numberAttr" работает как собственность, объявленный как сохранить, поэтому, когда вы измените его значение для ссылки на другой объект NSNumber, предыдущему объекту NSNumber будет отправлено сообщение о выпуске. Я ожидал бы увидеть это поведение, если предыдущий объект уже был выпущен.

У вас есть другие места, в которых вы устанавливаете "numberAttr"? Возможно ли, что один из этих объектов NSNumber был выпущен до изменения здесь атрибута?