2013-02-27 52 views
2

我有伊娃NSMutableArray* _syncModels和班裏的init方法初始化我像01​​什麼情況會導致iVar改變其類型?

整個類,我添加並從陣列移除對象,但我從來沒有重新初始化_syncModels

所以我得到這個崩潰報告,說-[NSConcreteData filterUsingPredicate:]: unrecognized selector sent to instance 0x23c740c0

symbolicating後,導致此故障的線路是[_syncModels filterUsingPredicate:[NSPredicate predicateWithFormat:@"NOT (dataManagerFieldRecord = nil)"]];

世界如何從一個NSMutableArrayNSConcreteData_syncModels變化?

這種崩潰是罕見的,但在那裏的一些對象獲取搞亂了,併發送一條消息它無法處理,我們正變得越來越這些。

我們針對ARC下6.1。

EDIT

我想出問題...我無意中加入self(該公司擁有的參考_syncModels)從selfdealloc方法到調度隊列...所以這是一個存儲器管理問題......

+0

首先,看一看[該另一SO回答](http://stackoverflow.com/questions/1113811/what-is-nsconcretedata-and-where-is-it-defined)約NSConcreteData和類簇(這是什麼NSMutableArray是)。然後給我們更多關於'_syncModels'中存儲的對象類型的信息。你的bug並不是真的關於NSConcreteData,但它很可能位於你所持有的對象和你創建的謂詞的某個地方。 – sosborn 2013-02-27 17:28:32

+0

@sosborn - 「NSMutableArray」不是「NSConcreteData」的類集羣嗎?我插入到這個數組中的對象都是相同的類型,並且他們的屬性在我的謂詞中被引用。我的單元測試每次都通過。 – 2013-02-27 18:02:44

+0

我的猜測是NSConcreteData實例實際上是引用您在數組中收集的某個對象中的一個屬性。有沒有可能你有一個對'dataManagerFieldRecord'沒有響應的對象? – sosborn 2013-02-27 18:09:08

回答

5

什麼情況會導致伊娃改變它的類型?

我能想象的唯一情況是程序員在源代碼中修改它的類型並重新編譯它。

您的意思是說對象指向存儲在伊娃指針已被改變。這是一個典型的內存管理錯誤,它通常意味着你期望在那裏的對象已經被過早地釋放(因爲你沒有足夠的引用),那麼運行時在創建時重用它的底層內存塊需要一個新對象。

+0

是的......你的大膽陳述比我的問題更準確(簡潔)。然而,這個特定的iVar對這個類是私有的,導致崩潰的特定方法也是私有的。這個類正在做一些內部對象的內部事情。我不明白在什麼時候這個對象會被過早釋放,因爲一旦我在我的類的init方法中分配/初始化它,我就不會改變它。 – 2013-02-27 16:47:05

+0

@TReddy我看不到關係。不要將「內部」對象像「公共」對象那樣進行內存管理? – 2013-02-27 16:47:47

+0

對不起......我試圖去溝通,當我使用術語「內部對象」時,沒有其他人提到這個iVar,除了擁有的類。所以沒有別的,但這個類可以修改這個對象,並且這個對象直到這個類纔會被釋放。 – 2013-02-27 16:56:46

相關問題