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
中。
在我的应用程序中实现状态恢复后,我的视图控制器出现问题。
我的问题是,在视图控制器的 viewDidLoad
中,我试图恢复 self.naigationController
属性,即 nil
。
我在每个视图控制器的 viewDidLoad
方法中设置了断点,该方法位于我要恢复的视图控制器之前。在第一个视图控制器中,找到了导航控制器。在那之后的每一个中,包括我试图恢复的那个,导航控制器是 nil
.
这导致我无法设置导航栏可见性、视图放错位置等错误
有人知道为什么会这样吗?
尝试将代码移至 viewWillAppear
。
与 viewDidLoad
不同,viewWillAppear
可以被多次调用,因此请注意确保您的代码是幂等的。也就是说,如果重复调用该方法,请确保结果符合您的预期。例如,如果已经添加了视图,请确保不要初始化新的子视图。
navigationController
属性 向上搜索 parentViewController
以找到 class UINavigationController
之一。只有从情节提要中加载的视图控制器才能在 viewDidLoad
时间(以及 awakeFromNib
时间)找到它们的导航控制器。您可能在恢复过程中实例化了视图控制器的一个新实例,而不是使用故事板创建的实例。解决方案是帮助恢复过程找到现有的视图控制器,如果它改变了路径,例如由于拆分控制器方向更改(通过应用程序委托中的 viewControllerForRestorationPathComponents
),尽管这会带来一系列问题,或者通过不需要 viewDidLoad
中的导航控制器来使视图控制器工作,例如按照其他人的建议将其放在 viewWillAppear
中。