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

Posted

技术标签:

【中文标题】按下 UIButton 会导致无法识别的选择器错误【英文标题】:Pressing UIButton results in Unrecognized Selector error 【发布时间】:2011-09-02 13:27:48 【问题描述】:

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

为什么会这样?

【问题讨论】:

【参考方案1】:

选择器的正确名称是

@selector(toggleEdit:)

没有 : 它将寻找具有此签名的方法:

-(void) toggleEdit  // No parameters


当你实际声明时:

-(void) toggleEdit:(id)sender


【讨论】:

【参考方案2】:

改变

@selector(toggleEdit)

@selector(toggleEdit:)

【讨论】:

【参考方案3】:

对于遇到此问题的其他任何人,当您不再拥有某些东西并且该语句指向某个垃圾地址记忆。

【讨论】:

尽管在这种特定情况下,正如其他人所说,@selector 缺少冒号。【参考方案4】:

应该是:

-(IBAction) toggleEdit:(id)sender 

@selector(toggleEdit:)

【讨论】:

【参考方案5】:

试试:

UIBarButtonItem *editButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
target:self action:@selector(toggleEdit) forControlEvents:UIControlEventTouchUpInside];

【讨论】:

【参考方案6】:

您尝试使用的方法带有一个参数,这意味着它的名称中有一个冒号——冒号实际上是名称的一部分。获取选择器时需要包含该冒号:

@selector(toggleEdit:)

请参阅 Objective-C 编程语言的 Message Syntax 部分:

选择器名称包括名称的所有部分,包括冒号,因此前面示例中的选择器命名为setOriginX:y:。它有两个冒号,因为它有两个参数。但是,选择器名称不包含任何其他内容,例如返回类型或参数类型。

【讨论】:

【参考方案7】:

如果您使用的是故事板。有时,从情节提要中移除按钮并放置一个新按钮并进行必要的连接会有所帮助。

【讨论】:

以上是关于按下 UIButton 会导致无法识别的选择器错误的主要内容,如果未能解决你的问题,请参考以下文章

-[UIView setShowsFPS:]:无法识别的选择器错误

错误:- - [UIButton setValue:]:无法识别的选择器发送到实例

按下按钮时出现无法识别的选择器错误

Swift Customized UIButton 无法识别的选择器发送到实例

创建到文档目录的路径会导致 NSInvalidArgumentException 和无法识别的选择器问题

UIRefreshControl addTarget 操作导致“无法识别的选择器”错误