【问题标题】:Pressing UIButton results in Unrecognized Selector error按下 UIButton 会导致无法识别的选择器错误
【发布时间】: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”

为什么会这样?

【问题讨论】:

    标签: objective-c ios cocoa-touch selector


    【解决方案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】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-01-26
                • 1970-01-01
                • 1970-01-01
                • 2018-06-09
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多