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

时间:2016-04-26 22:22:28

标签: ios uinavigationcontroller viewdidload

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

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

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

这导致了我无法设置导航栏可见性,视图错位等错误。

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

2 个答案:

答案 0 :(得分:0)

尝试将代码移至viewWillAppear

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

答案 1 :(得分:0)

navigationController属性在parentViewController个搜索中找到类UINavigationController中的一个。只有从情节提要中加载的视图控制器才能在viewDidLoad时间(和awakeFromNib)找到其导航控制器。您很可能在还原过程中实例化了视图控制器的新实例,而不是使用情节提要创建的实例。解决方案是帮助还原过程找到现有的视图控制器(如果它已更改路径),例如路径。原因是分割控制器方向更改(通过您的应用程序委托中的viewControllerForRestorationPathComponents)带来了一系列问题,或者通过不需要viewDidLoad中的nav控制器来使视图控制器正常工作,例如像其他人建议的那样将其放在viewWillAppear中。