iOS 恢复 - 为啥在我正在恢复的视图之前显示另一个视图?
Posted
技术标签:
【中文标题】iOS 恢复 - 为啥在我正在恢复的视图之前显示另一个视图?【英文标题】:iOS Restoration - why is another View displayed before the one I'm restoring?iOS 恢复 - 为什么在我正在恢复的视图之前显示另一个视图? 【发布时间】:2014-03-19 12:06:56 【问题描述】:我的故事板有:NavigationController -> UIViewController 1 -> UIViewController 2 -> UIViewController 3 -> UITabBarController -> 四个 UIViewControllers (a,b,c,d)
我正在为应用程序添加恢复支持。我已将其添加到 UIViewController #1 和 #3,现在将其添加到 UITabBarController 下的 UIViewController 'c'。
当我在显示 UIViewController 'c' 时使用 Xcode 杀死我的应用程序,然后再次启动应用程序时,视图控制器的方法被正确调用并且其 UITextFields 的内容被正确恢复。
但是在“c”视图控制器中放置断点时,我可以看到 UIViewController 3 暂时显示。调用的是 viewDidLoad 和 viewWillAppear: 方法。
UIViewController #3 显示的典型原因是什么?
我一直在为我的 UIViewController 实施恢复,从最终用户的角度来看似乎没有任何负面影响 - 没有断点,显示器没有机会更新以显示中间查看。
【问题讨论】:
与我的查询完全无关,而是对对此问题所做的细微修改的查询。将缩写“I'm”扩展为“I am”是否是因为觉得英语阅读困难的人无法理解缩写? 抱歉@Giordano-Scalzo 我无意中回滚了您的小修改(我正在尝试大多数链接以找到向您发送消息的路线)。 【参考方案1】:这就是视图控制器恢复是的。该应用程序从头开始启动;为了到达终止时显示的视图控制器,应用程序沿着链从根视图控制器到要显示给用户的视图控制器遍历视图控制器创建序列。它不可能以任何其他方式发生。 (毕竟,如果 VC2 的后退按钮要通向 VC1,那么 VC2 必须在导航控制器堆栈中高于 VC1。)而且您不希望它发生 不,因为您可能有重要的重建序列时要做的工作。通过在恢复过程中设置断点,您已经揭示了“幕后的人”。但是用户看不到那个进程(它被启动图像覆盖),所以没有问题。
特别重要的是,在创建链中以正确的顺序调用viewDidLoad
,并且所有视图控制器在发送decodeRestorableStateWithCoder:
之前都会发生这种情况,也是按照链的顺序。
(但是,您不应指望与 viewWillAppear:
及其表亲有关的任何事情。这些可能会或可能不会被调用,您无法确定何时。我认为这种不一致/不可预测性与viewWillAppear:
的时机是一个错误,但不幸的是,Apple 没有。)
【讨论】:
以上是关于iOS 恢复 - 为啥在我正在恢复的视图之前显示另一个视图?的主要内容,如果未能解决你的问题,请参考以下文章