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

Xcode中Navigation Controller跳转ViewController报错:无法识别选择器

解决Xcode 15.0.1中按钮跳转触发“unrecognized selector sent to instance”报错问题

报错核心原因

系统尝试调用ShowOrangeViewController:方法,但当前执行的ViewController实例(实际是UIViewController)未定义该方法,导致找不到对应的选择器。结合你的场景,问题大概率出在Storyboard的ViewController类关联错误或按钮IBAction绑定失效/错误上。

具体解决步骤

  • 检查BlueViewController的类绑定
    打开Storyboard,选中蓝色界面的ViewController,点击右侧面板的「Identity Inspector」(第三个图标),确认「Class」选项选择的是BlueViewController,而非默认的UIViewController。如果未设置,系统会将这个VC当作基础UIViewController实例,自然找不到你在自定义类中编写的方法。

  • 检查按钮的IBAction关联
    选中界面上的「Orange」按钮,打开右侧面板的「Connections Inspector」(最后一个图标),查看「Touch Up Inside」对应的关联项。确保关联的是当前BlueViewController的ShowOrangeViewController:方法,而非其他VC或无效绑定。如果关联错误,点击关联线末尾的叉号删除,重新拖拽按钮到BlueViewController的代码区域,创建正确的IBAction绑定。

  • 额外验证(规避后续问题)

    1. 打开OrangeViewController的Identity Inspector,确认「Storyboard ID」确实设置为OrangeViewController,否则instantiateViewController会返回nil,导致跳转失败。
    2. 确认Navigation Controller的根ViewController是BlueViewController,否则self.navigationController会为nil,无法执行push操作(从你的截图看已配置完成,可快速核对)。

优化后的代码(可选)

你的代码逻辑本身无问题,但强制解包存在崩溃风险,建议改成可选绑定的写法,更安全:

@IBAction func showOrangeViewController(_ sender: Any) {
    guard let orangeVC = storyboard?.instantiateViewController(withIdentifier: "OrangeViewController") as? OrangeViewController else {
        print("无法实例化OrangeViewController,请检查Storyboard ID")
        return
    }
    navigationController?.pushViewController(orangeVC, animated: true)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:25:07