NSInvalidArgumentException,使用 performSegueWithIdentifier 时发送到实例的无法识别的选择器

Posted

技术标签:

【中文标题】NSInvalidArgumentException,使用 performSegueWithIdentifier 时发送到实例的无法识别的选择器【英文标题】:NSInvalidArgumentException, unrecognized selector sent to instance when using performSegueWithIdentifier 【发布时间】:2013-01-25 16:18:15 【问题描述】:

我知道实例消息的无法识别选择器很常见,但我似乎无法在我的项目中找到导致它的原因。 当点击特定按钮时,我基本上试图从一个控制器切换到另一个控制器。我在故事板中定义了segue。然而,按钮不是在情节提要中创建的,按钮是在视图控制器中以编程方式创建的,然后由我试图从中分离的控制器继承。这是我正在尝试做的代码:首先,这是我的 ButtonViewController.m 的一部分,它具有按钮和我要继承的控制器

UIButton *EButton=[UIButton buttonWithType:UIButtonTypeCustom];
[EButton setFrame:CGRectMake(0, 450, 106, 60)];
[EButton setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
[EButton setImage:[UIImage imageNamed:@"test1.png"] forState:UIControlStateNormal];
[EButton setImage:[UIImage imageNamed:@"test2.png"] forState:UIControlStateHighlighted];
[EButton setEnabled:YES];
[EButton addTarget:self action:@selector(EButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:EButton];
-(IBAction)EButtonPressed:(id)sender

[self performSegueWithIdentifier:@"WorldtoE" sender:self];

现在,我在我的 WorldViewController 中继承了这个 ButtonViewController.m。 (原因是,我需要在整个应用程序中的不同控制器中使用此按钮,并且希望只进行一次更改以备不时之需)。现在,当我运行该应用程序时,该按钮已创建完美,但一旦我点击它,我就会收到此错误:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[WorldViewController EButtonPressed]:无法识别的选择器发送到实例 我什至尝试在我的 WorldViewController .h 文件中定义 -(IBAction)EButtonPressed:(id)sender 并尝试在我的 .m 文件中包含整个 ibaction 函数,但是当我点击按钮时仍然得到相同的 NSInvalidArgumentexception。我究竟做错了什么?是的,我在故事板中给了 segue 相同的标题。

【问题讨论】:

【参考方案1】:

换行:

[EButton addTarget:self action:@selector(EButtonPressed) forControlEvents:UIControlEventTouchUpInside];

到:

[EButton addTarget:self action:@selector(EButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

【讨论】:

谢谢!!我在这上面浪费了几个小时!

以上是关于NSInvalidArgumentException,使用 performSegueWithIdentifier 时发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 作为参数传递 swift