2011-08-12 13 views
2

我在我的應用程序這個奇怪的崩潰,當我嘗試調用這個函數我的對象上pageModel指針指向一個不同的對象:(無法識別的選擇發送到實例)

[pageModel pageTitle] isEqualToString:@"some text"]; 

這是調試器轉儲

-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x661de40 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x661de40' 

,並與我發現了一些非常奇怪的行爲,調試器亂搞

(gdb) po pageModel 
<PXPage: 0x6622e20> 

(gdb) po [pageModel pageTitle] 
<__NSArrayM 0x661de40>(... 

(gdb) po pageModel.pageTitle 
<__NSArrayM 0x661de40>(... 

它認爲這是一個MutableArray,但它不是。它應該是一個NSString ...而其他時間是UIImage,其他時間是其他時間,等等。 有沒有人作爲關於這裏發生了什麼的線索?

謝謝

+0

您能否提供一些有關如何創建pageModel及其應包含的對象的詳細信息? – Luke

+1

由於某些其他原因,「pageModel」或「pageTitle」可能已被釋放或垃圾。 –

+0

你說「它認爲它是一個MutableArray,但它不是。」。那麼,這顯然是錯誤的。它比你更清楚。這是什麼。當你在調試時,你的態度必須是:「我犯了一個錯誤,我犯了什麼錯誤?」。這是導致發現錯誤的態度。 – gnasher729

回答

5

這是一個經典的雙釋放錯誤。一個對象被釋放了太多次,它佔用的內存被分配給另一個對象,所以其他對象正在接收針對舊對象的消息。

您想在方案編輯器中將NSZombieEnabled環境變量設置爲YES並在調試器中運行您的應用程序。 Google和/或計算器搜索可以幫助您找到關於此的更多信息。

+0

確實。在分析我的代碼幾個小時後,我發現在其他類中,該屬性在init方法中沒有正確保留,但隨後在dealloc中釋放。 – onizuka87

-1

[pageModel pageTitle] is returns array。您正在使用NSString類。這是崩潰的原因。所以請檢查[pageModel pageTitle]的數據類型。

相關問題