2009-11-22 129 views
0

我注意到我在應用程序的隨機點出現一些錯誤。我有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 

非常感謝,

邁克爾

回答

3

我想通了!事實證明,這是我的託管對象上下文的線程問題。我在主線程上創建它,並在後臺線程中使用它。但是,似乎上下文必須在1個線程內創建和使用。希望這可以幫助任何可能遇到此問題的人,因爲調試信息不​​是很清楚!

+0

+1爲答案,因爲它幫助我解決了我的問題。在我的情況下,由主要上下文創建的NSManagedObject被用在背景上下文中,這顯然是錯誤的。 – nagan 2015-05-07 10:15:55

1

的 「numberAttr」 就像聲明爲保留財產,所以當你改變它的值來引用一個不同的NSNumber對象時,以前的NSNumber對象將被髮送一個釋放消息。如果之前的對象已經被釋放,我會期望看到這種行爲。

你有其他地方,你正在設置「numberAttr」?在這裏更改屬性之前是否有可能已經發布了其中一個NSNumber對象?