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

iOS Storyboard应用UIMoreNavigationController相关崩溃问题及临时修复方案

iOS UITabBarController嵌套导航控制器时的崩溃问题及临时解决方案

启用Zombie Objects后捕获到如下崩溃日志:

2023-08-09 21:25:30.736022+1000 ThingyTwo[31860:4546795] *** 
-[UITabBarController removeChildViewController:]: message sent to deallocated instance 0x14b830000
(lldb)

崩溃触发场景

  • 将UITabBarController嵌套在UINavigationController中
  • UITabBarController包含超过5个视图控制器,此时内部会自动使用UIMoreNavigationController展示剩余控制器
  • 将外层的UINavigationController从视图层级移除时

崩溃并非100%触发,概率在20%-80%之间。已制作完全基于Storyboard的极简复现项目,运行后点击“Show”按钮再点击“Dismiss”按钮,重复操作即可触发崩溃。


更新1

感谢你反馈此问题,这看起来是一个Bug,我们会进一步调查。
(来自苹果开发者论坛的官方回复)

更新2
在苹果修复该Bug前,可采用以下临时解决方案:

class NavigationController: UINavigationController {
    override func viewWillDisappear(_ animated: Bool) {
        if !animated {
            setViewControllers([], animated: false)
        }
        
        super.viewWillDisappear(animated)
    }
}

该方案通过在导航控制器即将消失且无动画时,清空其内部的视图控制器列表,避免因已释放的UITabBarController实例被再次调用而引发崩溃。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:12:17