2011-03-01 36 views
0

我得到我的應用程序崩潰是由於以下錯誤:「無法識別的選擇器發送到實例」錯誤是什麼意思?

-[NSCFString count]: unrecognized selector sent to instance 0x612b060 

誰能告訴我這是什麼意思,我怎樣可以找到我的代碼行參考0x612b060

+0

哪個編譯器使用? – 2011-03-01 09:35:04

+0

這個問題與[this one](http://stackoverflow.com/questions/3645213)或[許多其他](http://stackoverflow.com/search?q=unrecognized+selector)幾乎相同,你在詢問之前嘗試搜索? – zoul 2011-03-01 09:41:03

回答

5

你是對一個對象(可能是一個集合,例如數組,字典或集合)調用count方法,該方法已發佈或尚未初始化。

3

您在NSCFString發送消息「計數」,是指,要求的NSString數據類型「計數」的方法。

要查找的代碼,你可以使用堆棧跟蹤,但我知道你正在做的是:

上的NSArray或(數組類型),並試圖計算分配的NSString數據。

2

最有可能出現這種情況是因爲你有一個集合對象(如NSArray中,NSDictionary的),您沒有正確保留。

嘗試使用NSZombies發現得到了釋放的對象。

  1. 右鍵單擊Xco​​de中可執行文件組中的可執行文件。選擇Get Info
  2. 選擇參數選項卡。
  3. Variables to be set in the environment創建名爲NSZombieEnabled變量和其值設置爲YES。不要忘記激活它。
  4. 打開斷點並運行您的代碼。
  5. 調試器會將您指向早期發佈的對象。

你做了調試這個問題,你應該禁用NSZombies後。 NSZombies不會釋放任何內存,它只是將對象標記爲已釋放。
所以你最終會遲早記憶警告。
您可以簡單地刪除它前面的複選標記來停用NSZombies。

+2

哦,我如何恨評論沒有評論... – 2011-09-14 19:52:40

0

您的意思是在您的字符串上撥打length

0

也許有人會需要這樣: 當我有這樣的問題,我用: [ myarray retain];myarray = [NSArray arrayWithObjects: ...]; 和它的工作。我認爲這是因爲我的陣列太早摧毀了自己。 但我不知道我現在可以釋放這個對象嗎? 只需[myarray autorelease]?有什麼相反的保留?

+3

歡迎來到StackOverflow。你答案的最後部分是一個問題。請使用主頁上的「Ask Question」按鈕。否則你的問題將不會被社區看到。 – 2011-09-13 09:53:07

+0

與'retain'相反的是'release'。 'autorelease'賦予將保留對象的'release'調用到當前自動釋放池的責任。 – 2011-09-14 10:38:47

0

一個實際的例子:

有時候,有一個實際的差別,我不瞭解清楚呢。 valueForKey在SOGo-3.1中不起作用。4代碼試圖調用不可用的「方法」 ASProtocolVersioncontext對象:

`EXCEPTION: <NSException: 0x55f43f93e4d0> NAME:NSInvalidArgumentException REASON:-[WOContext ASProtocolVersion]: unrecognized selector sent to instance 

objectForKey作品(而且是elesewhere查詢context對象的代碼通常的方式)。

請參閱https://github.com/inverse-inc/sogo/pull/217/files

相關問題