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

performSegue跳转两个VC,其中一个navigationController为nil问题排查

问题排查与解决思路

针对你遇到的FeatureGeometryController通过Show segue push后navigationController为nil的问题,以下是几个常见的排查方向:

1. 检查Storyboard中Segue的目标与Presentation设置

  • 确认segue的目标是FeatureGeometryController本身,而非它所在的UINavigationController:如果不小心将segue拖到了嵌套的导航控制器上,push到栈中的会是这个新的导航控制器,而FeatureGeometryController作为它的根VC,其navigationController会指向这个嵌套实例(或因配置异常返回nil)。
  • 检查segue的Presentation属性(iOS 13+):选中segue后在Attributes Inspector中查看,若Presentation被改为Page Sheet/Form Sheet等非Full Screen/Automatic的选项,Show segue会以模态方式呈现VC,而非push到原导航栈,此时目标VC的navigationController必然为nil。改回Automatic或Full Screen即可。

2. 检查FeatureGeometryController的代码冲突

  • 确认该类中没有自定义同名的navigationController属性:如果手动定义了var navigationController: UINavigationController?或类似属性,会覆盖UIViewController自带的只读计算属性,导致系统无法正确返回所属的导航控制器。删除自定义的同名属性即可。

3. 检查FeatureGeometryController的Storyboard独立配置

  • 确认该VC没有被设置为某个UINavigationController的初始VC(即未勾选Is Initial View Controller):如果该VC是某个导航控制器的根VC,且segue直接指向这个VC,Storyboard可能会自动将其包装进新的导航控制器,导致push的是新导航控制器而非VC本身,进而使VC的navigationController指向这个新实例(或出现nil异常)。

4. 验证导航栈状态

  • 在触发segue前,打印当前VC的导航栈状态,确认原导航栈正常:
    @objc func handleButtonAction() {
        print("Current navigation stack: \(navigationController?.viewControllers ?? [])")
        performSegue(withIdentifier: "Feature Geometry", sender: self)
    }
    
    若栈状态异常(比如当前VC已不在栈中),则需要排查是否有其他代码意外修改了导航栈。

内容的提问来源于stack exchange,提问作者Son of a Beach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:28:24