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
相关产品推荐
相关产品推荐

