iOS 恢复 - 为什么在我正在恢复的 View 之前显示另一个 View ?

标签 ios objective-c xcode state-restoration

我的 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/

相关文章:

ios - 为什么我的委托(delegate)仅在定义为 VC 而不是外部类时才起作用?

ios - Swift 3 - 如何将 UISwitch 的当前值存储在 UITableViewCell 中,实际 ViewController 的变量中?

ios - 从 objc 突变 swift 数组?

objective-c - 以编程方式在 iOS 中捕获带有状态栏的完整屏幕截图

ios - 细胞上的图像并非一直向左

ios - 在 AFNetworking 中成功调用后,self.tableView reloadData 不工作

ios - bool 属性上的 KVO,不调用 observeValueForKeyPath

ios - xcode 和 Storyboard : how build an user profile view

c# - 自定义 .plist 文件未添加到 ios 项目

ios - 两个目标,两个同名的头文件如何将每个头文件用于正确的目标?