无法识别的选择器 NSInvalidArgumentException:对于 IBAction?

Posted

技术标签:

【中文标题】无法识别的选择器 NSInvalidArgumentException:对于 IBAction?【英文标题】:Unrecognized selector NSInvalidArgumentException: for IBAction? 【发布时间】:2013-01-02 14:10:20 【问题描述】:

我在 ios iPad 应用程序中遇到了一个奇怪的问题。当我将 UIButton 映射到 IBAction 并使用内部事件进行修饰时,我的应用程序崩溃了。我在控制台中遇到的错误就像 Unrecognized selector NSInvalidArgumentException.

顺便说一下,我项目中的所有视图控制器都有同样的问题。视图控制器映射到标签栏控制器。

我通过拖放另一个项目的所有文件创建了这个项目。拖动的文件正确放置在当前项目中,没有问题。这会导致问题吗?

我无法弄清楚出了什么问题。

谢谢

【问题讨论】:

复制故事板还是只复制代码? 除了您的方法之外,该按钮在插座中是否有任何其他连接? 实现中的方法和头文件中声明的方法一样吗? 您是通过代码还是从 Nib 连接事件内部的修饰? 今天我在 ios 中创建了一个新项目,将 UIButton 连接到名为“go”的操作,只有 nslog(@"go");但是得到了同样的错误。我试图指出错误,15分钟后我重新创建了新项目,同样的代码......它工作了!!!是时候切换到 AppCode 了,还是在 XCode 中 5 年后我们仍在学习和了解我们的 XCode?​​span> 【参考方案1】:

只需右键单击您在 xib 中的按钮并检查您的按钮是否只有一个连接,如果您有多个连接,请删除不需要的连接。

【讨论】:

我只有一个连接。没问题。【参考方案2】:

您是否在界面生成器中设置了自定义UIViewController 子类的类?

【讨论】:

是的,就像你说的那样已经设置好了。例如它就像 MyViewController。【参考方案3】:

如果在应用 Gabriele PetronellaRajneesh071 的解决方案后问题仍然存在,那么可能会出现一个小错误:

如果您正在使用:

[btn addTarget:self action:@selector(buttonTouched:)  forControlEvents:UIControlEventTouchUpInside];

那么buttonTouched方法必须是(IBAction)

如果 buttonTouched 方法是 (void) 类型,那么只需从您的方法调用中删除该 :

我知道这很简单,但它可能会导致崩溃。

【讨论】:

我认为只有 IBAction 类型的方法出现在 IB 中。如果它是一个空白,我不认为它会出现在他的 IB 行动可供选择的方法列表中。 @Jazzmine :是的,我知道。这就是为什么我问 Kanaga 是手动编写代码还是连接了 Outlets。【参考方案4】:

我会检查以确保您有 UIButton 引用的无法识别的方法:

1) .h 中列出的方法签名与 .m 文件中列出的方法签名一致吗? 2) 调用方法时是否传递了任何预期的参数? 3) 在您的 .h 和 .m 文件中,该方法是否始终列为类 (+) 或实例 (-) 方法?

我知道您说您复制了文件,但您是否进行了测试以确保您复制的应用程序也可以正常工作?其他应用程序是否将方法连接到按钮?复制后你有没有改变任何东西?

干杯

【讨论】:

【参考方案5】:

感谢您的回答。我已经解决了这个问题。

实际问题:

    我的项目是使用 ARC。

    实际上,我通过单击带有IBAction 的按钮将其添加为子视图,从而从一个视图导航到另一个视图,如下所示,

    -(IBAction)signInAndGoToFrameworkView :(id)sender  
    
    MyViewController myViewController  = [[MyViewController alloc] initWithNibName:@"MyViewController " bundle:nil];
    [self.view addSubview:myViewController.view];
    
    
    

3 .由于该项目使用 ARC,因此对象 myViewController 被释放,因为这是一个局部变量。所以当我按下后退按钮时

   [self.view removeFromSuperview]; 

应用程序崩溃了。

解决方案:

所以当我刚刚在 .h 文件中声明 MyViewController myViewController 并且还给出了 @property@synthesize 时。然后把IBAction改成,

   -(IBAction)signInAndGoToFrameworkView :(id)sender  

    myViewController  = [[MyViewController alloc] initWithNibName:@"MyViewController " bundle:nil];
    [self.view addSubview:myViewController.view];

    

现在问题解决了。

谢谢。

【讨论】:

以上是关于无法识别的选择器 NSInvalidArgumentException:对于 IBAction?的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewController 无法识别的选择器发送到实例

无法识别的选择器...错误IOS [关闭]

无法识别的选择器 - 保存到核心数据

目标动作模式的快速无法识别的选择器

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

[UICollectionViewCell imageView]:无法识别的选择器发送到实例