0

我得到错误

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

4

3 回答 3

3

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

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

代替

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

在第一种情况下,您调用-(void)buttonPressed:(id)sender. 在第二个中,您调用-(void)buttonPressed.

但是,如果您为您的 . 提供更多代码UIButton,则可能更容易理解发生了什么。

于 2012-02-10T14:16:13.840 回答
1

在第一个(不工作)情况下,您拥有-(void)buttonPressed:(id)sender,在第二个(工作)情况下,您拥有-(void)buttonPressed. 显然,您的按钮在没有参数的情况下调用该函数。

于 2012-02-10T14:13:32.303 回答
1

当您添加了@selector(buttonPressed:)按钮触摸事件时,可能会出现这种情况,您忘记输入:with 方法名称。

你可以检查一下。

于 2012-02-10T14:15:59.050 回答