2012-02-10 137 views
0

我得到的錯誤無法識別的選擇發送到實例,iPhone錯誤

「012-02-10 13:54:52.570的HelloWorld [14275:10103] - [HelloWorldViewController buttonPressed]:無法識別的選擇發送到實例0x6cc0c50 2012-02-10 13:54:52.572的HelloWorld [14275:10103] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: ' - [HelloWorldViewController buttonPressed]:無法識別的選擇發送到實例0x6cc0c50'」。

這是有問題的文本:

-(void)buttonPressed:(id)sender { 
    UIButton *button = (UIButton*)sender; 
    NSString *text = [button titleForState:UIControlStateNormal]; 
    NSLog(@"%@",text); 
} 

我知道這是因爲,如果我更改代碼這樣:

-(void)buttonPressed { 
    NSLog(@"Button Pressed"); 
} 

然後它工作正常。

但是我需要發送消息的組件中的文本。組件不會通過IB拖放。它們被分配,初始化並放置在loadView方法中。對於我的每個按鈕,我都添加了buttonPressed作爲動作偵聽器。

+0

您能否顯示添加動作偵聽器的代碼? – 2012-02-10 14:10:57

回答

3

錯誤無法識別的選擇器可能是由於缺少:

[yourbutton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

代替

[yourbutton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside]; 

在你打電話-(void)buttonPressed:(id)sender尚屬首例。在第二,而不是你打電話-(void)buttonPressed

但是,如果您爲您的UIButton提供了更多的代碼,那麼可以更容易理解正在發生的事情。

+0

應該指出的是,這個答案也適用於Swift。 – Matt 2015-09-21 14:32:58

1

在第一個(不工作)的情況下,你有-(void)buttonPressed:(id)sender,第二個(工作)你有-(void)buttonPressed。顯然你的按鈕不帶參數地調用函數。

1

這可能是您爲按鈕觸摸事件添加了@selector(buttonPressed:)的情況,您忘記了將方法名稱設置爲:

你可以檢查一致。

相關問題