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绑定。额外验证(规避后续问题)
- 打开OrangeViewController的Identity Inspector,确认「Storyboard ID」确实设置为
OrangeViewController,否则instantiateViewController会返回nil,导致跳转失败。 - 确认Navigation Controller的根ViewController是BlueViewController,否则
self.navigationController会为nil,无法执行push操作(从你的截图看已配置完成,可快速核对)。
- 打开OrangeViewController的Identity Inspector,确认「Storyboard ID」确实设置为
优化后的代码(可选)
你的代码逻辑本身无问题,但强制解包存在崩溃风险,建议改成可选绑定的写法,更安全:
@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
相关产品推荐
相关产品推荐

