0

我正在使用UIViewController(當然是一個子類)和一個文本字段,當內容發生改變時(發送到ViewController的contentsChanged:選擇器),該文本字段會發送一個動作。它通過發送contentsChanged:到IB的文件所有者來完成。 但是當我測試它,它說:「 - [NSCFString contentsChanged:]:無法識別的選擇器發送到實例」和十六進制實例指針。 我猜測出於某種原因,視圖控制器被移動到另一個指針和一個字符串被分配在那裏,但我不明白爲什麼。 有什麼建議嗎?NSCFString或UIViewController?

回答

3

聽起來像一個經典案例。請閱讀NSZombieEnabled以瞭解如何跟蹤這類問題。

+0

這絕對是第一次嘗試。如果你遇到殭屍,肯定存在內存管理問題。 – Chuck 2010-08-05 21:55:46

+0

NSZombieEnabled是如何工作的?它有什麼作用? – 2010-08-06 12:52:10

+0

如何搜索「NSZombieEnabled」以瞭解如何? http://www.google.co.uk/search?q=NSZombieEnabled – 2010-08-06 20:26:18

0

不看代碼,它看起來像你正在調用contentsChanged:在文本字段的文本,而不是UIViewController子類。

+0

不,我可以告訴你,我給它一個目標的代碼: [inputTextField addTarget:self action:@selector(contentsChanged :) forControlEvents:UIControlEventEditingChanged]; 它沒有理由稱它爲文本! – 2010-08-05 15:02:37

1

我有一個的UIViewController的一個子類完全相同的問題,這一塊的無害代碼:

- (void)viewDidLoad 
{ 
    NSLog(@"%@ %s %@", [self class], _cmd, answerButton); 
    [self.answerButton addTarget:self 
      action:@selector(getAnswerToQuestion:) 
     forControlEvents:UIControlEventTouchUpInside]; 
} 

是,answerButton連接(這是一個IBOutlet),是的,- (IBAction)getAnswerToQuestion:(id)sender;是正確的方法,但不喜悅。當我註釋掉viewDidLoad中,並取得了IB的連接,這表明在崩潰報告的故障發生在[UIControl sendAction:到:forEvent:]導致

objc_msgSend()選擇名稱:performSelector:withObject :withObject:

我無法證明它,但我懷疑在UIKit中有一處將綁定和addTarget轉換爲對performSelector的調用的錯誤。我打算先升級到iOS 4.01,看看是否能解決問題。

更新: 我不確定我的問題是否與Alexandre Cassagne相似,但爲了共享信息我不會刪除它。當我開始製作示例項目以提交錯誤報告時,我經常解決我的問題。是的,點擊進行answerButton調用getAnswerToQuestion:就像一個很好的小對象,一切都很好。

示例項目的子類UIViewController和我的真實項目的區別在於,第一個也作爲xib的文件所有者,而第二個只是其中一個視圖控制器。當我將getAnswerToQuestion移到實際項目中的文件所有者時,單擊answerButton按預期工作。所以,我的直覺是,問題出現在從綁定到performSelector的翻譯中並沒有那麼遙遠:問題在於響應者鏈。我認爲以編程方式或通過IB建立行動 - 目標鏈接將繞過響應者鏈,但顯然不是。

現在的問題是,Alexandre當然在他的問題中聲明他的contentsChanged:方法已經是文件所有者的一部分,這使得我的回答與問題無關。

+0

謝謝我要升級到4.0.1並查看它是否有效。如果你在我之前做過,請讓我在這裏發帖告訴我它是否有效。 – 2010-08-05 16:58:12

+0

我剛升級,很遺憾地告訴你它沒有工作。我用(void)替換(IBAction),這是根據文檔正確的iOS表單。我的最新崩潰報告: iPhone模擬器4.0(211.1),iPhone OS 4.0.1(iPhone/8A306) ***由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:' - [NSCFString getAnswerToQuestion:]:無法識別的選擇器已發送到實例0x711fec0'。 我可以確認「實例0x711fec0」是在addTarget中指定的自我,即子類視圖控制器。 – 2010-08-06 13:18:25

0

您應該考慮在UITextField的文本更改時使用UITextFieldDelegate協議來回調。我沒有看,但這是我會做我的頭頂。

相關問題