You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Segue触发时抛出“unrecognized selector sent to instance”异常?

解析"unrecognized selector sent to instance"异常的原因及解决思路

这个错误说白了就是系统找不到你要调用的那个方法,结合你用按钮触发Segue的场景,大概率是下面这几个坑导致的:

1. IBAction方法的签名或连线出问题

你贴的代码里,方法是@IBAction func femaleButton(_ sender: AnyObject),首先,现在iOS开发里IBAction更常用UIButton或者Any作为sender类型,虽然AnyObject理论上兼容,但如果你的按钮在Storyboard里的连线和代码方法不匹配,就会触发错误。比如:

  • 你可能在Storyboard里把按钮的Touch Up Inside事件连到了一个已经被删除、重命名的方法,或者连线指向的方法签名和你现在代码里的不一样(比如之前参数是UIButton,后来改成了AnyObject但没重新连线);
  • 你贴的代码明显不完整——缺少闭合的},如果实际代码就是这样,编译器可能没拦住,但运行时系统会识别不出完整的方法,直接报错。

2. Segue触发方式的冲突

触发Segue有两种常见方式:

  • 直接在Storyboard里把按钮拖到第二个VC创建Segue(这种情况下,按钮点击会自动触发Segue,不需要额外写IBAction);
  • 在IBAction里调用performSegue(withIdentifier: "你的SegueID", sender: sender)手动触发。

如果你既做了Storyboard自动Segue,又写了IBAction,而且IBAction本身有问题(比如方法找不到),那按钮点击时系统先尝试调用IBAction,就会抛出这个异常。另外,如果是手动触发Segue,你还得确认Segue的标识符和代码里写的完全一致,不然也可能间接引发问题。

3. 视图控制器的类绑定错误

打开Storyboard,检查第一个ViewController的Custom Class是不是正确绑定了你代码里的那个VC类。如果类名写错或者没绑定,按钮的IBAction就找不到对应的方法实现,自然会报错。

快速排查步骤

  1. 检查连线有效性:右键点击Storyboard里的按钮,查看Touch Up Inside对应的连线,如果有红色标记,直接删掉重新拖线到代码里的正确方法;
  2. 补全代码:把IBAction方法的闭合}补上,确保方法定义完整;
  3. 统一方法签名:把IBAction的参数改成@IBAction func femaleButton(_ sender: UIButton),这样更明确,也避免类型不兼容的问题;
  4. 核对Segue配置:如果是手动触发Segue,确认Storyboard里Segue的Identifier和代码里performSegue调用的标识符完全一致,没有拼写错误。

内容的提问来源于stack exchange,提问作者lordcrandon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:13:50