我的故事板有:NavigationController - > UIViewController 1 - > UIViewController 2 - > UIViewController 3 - > UITabBarController - >四个UIViewControllers(a,b,c,d)
我正在为应用添加恢复支持。我已将它添加到UIViewController#1和#3,现在我将它添加到UIViewController' c'在UITabBarController下。
当我使用Xcode杀死我的应用程序时,显示UIViewController' c'然后再次启动应用程序,正确调用viewcontroller的方法,并正确恢复其UITextFields的内容。
但是在“c'”中设置断点。 view controller我可以看到UIViewController 3暂时显示。它的viewDidLoad和viewWillAppear:方法被调用。
通常会显示UIViewController#3的原因是什么?
我已经强制要求为我的UIViewControllers实施恢复,并且从最终用户的角度来看似乎没有任何负面影响 - 没有断点,显示器没有机会更新以显示中间视图。
答案 0 :(得分:2)
这就是控制器恢复的视图。该应用程序从头开始;为了到达终止时显示的视图控制器,应用程序将视图控制器创建序列从根视图控制器向下传递到要显示给用户的视图控制器。它不可能以任何其他方式发生。 (毕竟,如果VC2的Back按钮指向VC1,那么VC2必须高于导航控制器堆栈中的VC1。)并且你不希望它不发生,因为你可能有重要的重建序列时要做的工作。通过在恢复过程中设置断点,你已经揭示了“幕后的男人”。但是用户没有看到该过程(它被启动图像覆盖),所以没有问题。
特别重要的是,viewDidLoad
在创建链的正确顺序中被调用,并且在发送decodeRestorableStateWithCoder:
之前,所有视图控制器都会发生这种情况,同时按顺序排列链
(但是,你不应指望与viewWillAppear:
及其表兄弟有任何关系。这些可能会或可能不会被调用,你不能确定何时。我认为这种不一致/不可预测性以viewWillAppear:
作为一个错误的时间,但不幸的是,Apple没有。)