self.navigationController 在状态恢复期间为零

self.navigationController is nil during state restoration

在我的应用程序中实现状态恢复后,我的视图控制器出现问题。

我的问题是,在视图控制器的 viewDidLoad 中,我试图恢复 self.naigationController 属性,即 nil

我在每个视图控制器的 viewDidLoad 方法中设置了断点,该方法位于我要恢复的视图控制器之前。在第一个视图控制器中,找到了导航控制器。在那之后的每一个中,包括我试图恢复的那个,导航控制器是 nil.

这导致我无法设置导航栏可见性、视图放错位置等错误

有人知道为什么会这样吗?

尝试将代码移至 viewWillAppear

viewDidLoad 不同,viewWillAppear 可以被多次调用,因此请注意确保您的代码是幂等的。也就是说,如果重复调用该方法,请确保结果符合您的预期。例如,如果已经添加了视图,请确保不要初始化新的子视图。

navigationController 属性 向上搜索 parentViewController 以找到 class UINavigationController 之一。只有从情节提要中加载的视图控制器才能在 viewDidLoad 时间(以及 awakeFromNib 时间)找到它们的导航控制器。您可能在恢复过程中实例化了视图控制器的一个新实例,而不是使用故事板创建的实例。解决方案是帮助恢复过程找到现有的视图控制器,如果它改变了路径,例如由于拆分控制器方向更改(通过应用程序委托中的 viewControllerForRestorationPathComponents),尽管这会带来一系列问题,或者通过不需要 viewDidLoad 中的导航控制器来使视图控制器工作,例如按照其他人的建议将其放在 viewWillAppear 中。