2012-02-10 113 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:)的情况,您忘记了将方法名称设置为:

你可以检查一致。

相关问题