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