我的 Storyboard有:NavigationController -> UIViewController 1 -> UIViewController 2 -> UIViewController 3 -> UITabBarController -> 四个 UIViewControllers (a,b,c,d)
我正在为应用程序添加恢复支持。我已将它添加到 UIViewController #1 和 #3,现在将它添加到 UITabBarController 下的 UIViewController 'c'。
当我在显示 UIViewController 'c' 时使用 Xcode 终止我的应用程序,然后再次启动应用程序时,viewcontroller 的方法被正确调用并且其 UITextFields 的内容被正确恢复。
但是在“c” View Controller 中放置断点时,我可以看到暂时显示了 UIViewController 3。它调用了 viewDidLoad 和 viewWillAppear: 方法。
显示 UIViewController #3 的典型原因是什么?
我一直在为我的 UIViewControllers 实现恢复,从最终用户的角度来看似乎没有任何负面影响 - 没有断点,显示没有机会更新以显示中间查看。
最佳答案
这就是 View Controller 恢复是。该应用程序从头开始;为了到达在终止时显示的 View Controller ,应用程序将 View Controller 创建序列沿着从 Root View Controller 到要显示给用户的 View Controller 的链向下走。它不可能以任何其他方式发生。 (毕竟,如果 VC2 的“后退”按钮指向 VC1,则 VC2 在导航 Controller 堆栈中必须位于 VC1 之上。)并且您不希望它不发生,因为您可能有重要的重建序列时要做的工作。通过在恢复过程中设置断点,您揭示了“幕后黑手”。但用户看不到该过程(它被启动图像覆盖),所以没有问题。
特别重要的是,viewDidLoad
在创建链中以正确的顺序调用,并且在发送 decodeRestorableStateWithCoder:
之前,所有 View Controller 都会发生这种情况>,也是按照链条的顺序。
(但是,您不应该指望任何与 viewWillAppear:
及其表兄弟有关的事情。这些可能会被调用,也可能不会被调用,而且您不能确定何时。我认为这种不一致/关于 viewWillAppear:
时间的不可预测性是一个错误,但不幸的是,Apple 没有。)
关于iOS 恢复 - 为什么在我正在恢复的 View 之前显示另一个 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22505324/