我收到错误
“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 :(得分: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:)
时可能就是这种情况,您忘记将:
添加到方法名称。
你可以检查一下。