按UIButton会导致无法识别的选择器错误

时间:2011-09-02 13:27:49

标签: objective-c ios cocoa-touch selector

我的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'

为什么会这样?

7 个答案:

答案 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)

如果您使用的是故事板。有时它有助于从故事板中删除按钮,并添加一个新按钮,并进行必要的连接。