无法识别的选择器发送到实例,iPhone错误

时间:2012-02-10 14:07:37

标签: iphone ios uibutton unrecognized-selector method-invocation

我收到错误

  

“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作为动作监听器。

3 个答案:

答案 0 :(得分:3)

错误无法识别的选择器可能是由于缺少:

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

而不是

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

在第一种情况下,您拨打-(void)buttonPressed:(id)sender。在第二个中,你打电话给-(void)buttonPressed

但是,如果您为UIButton提供更多代码,则可以更加简单地了解正在发生的事情。

答案 1 :(得分:1)

在第一个(不工作)情况下,您有-(void)buttonPressed:(id)sender,在第二个(工作)中,您有-(void)buttonPressed。显然你的按钮无需参数即可调用函数。

答案 2 :(得分:1)

当您为按钮触摸事件添加@selector(buttonPressed:)时可能就是这种情况,您忘记将:添加到方法名称。

你可以检查一下。