我的UIView
中有一个按钮就是这样创建的:
UIBarButtonItem *editButton =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
target:self
action:@selector(toggleEdit)];
self.navigationItem.rightBarButtonItem = editButton;
[editButton release];
这是行动方法:
-(void) toggleEdit:(id)sender
{
}
但我收到此错误
2011-09-02 15:27:13.362 blubb [15006:207] - [DatabaseSelectionViewController toggleEdit]:无法识别的选择器发送到实例0x5a29d80 2011-09-02 15:27:13.365 blubb [15006:207] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [DatabaseSelectionViewController toggleEdit]:无法识别的选择器发送到实例0x5a29d80'
为什么会这样?
答案 0 :(得分:7)
选择器的正确名称是
@selector(toggleEdit:)
如果没有:,它会查找带有此签名的方法:
-(void) toggleEdit // No parameters
{
}
当你确实宣布:
-(void) toggleEdit:(id)sender
{
}
答案 1 :(得分:5)
更改
@selector(toggleEdit)
到
@selector(toggleEdit:)
答案 2 :(得分:2)
对于遇到此问题的其他任何人,当您不再拥有某些内容并且该语句指向某个垃圾邮件地址时,您还可以收到那些“无法识别的选择器发送到实例0x ...”错误存储器中。
答案 3 :(得分:1)
应该是:
-(IBAction) toggleEdit:(id)sender {}
和
@selector(toggleEdit:)
答案 4 :(得分:1)
尝试:
UIBarButtonItem *editButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
target:self action:@selector(toggleEdit) forControlEvents:UIControlEventTouchUpInside];
答案 5 :(得分:1)
您尝试使用的方法接受一个参数,这意味着它的名称中有一个冒号 - 冒号实际上是 名称的一部分。获得选择器时需要包含该冒号:
@selector(toggleEdit:)
请参阅Objective-C编程语言的Message Syntax部分:
选择器名称包括名称的所有部分,包括冒号,因此前面示例中的选择器名为
setOriginX:y:
。它有两个冒号,因为它需要两个参数。但是,选择器名称不包含任何其他内容,例如返回类型或参数类型。
答案 6 :(得分:0)
如果您使用的是故事板。有时它有助于从故事板中删除按钮,并添加一个新按钮,并进行必要的连接。