UIView控制器状态恢复 - 弱关系



在 iOS 6 中,Apple 为UIViewController和相关类添加了状态恢复。这允许应用程序在终止时保存状态,并在用户恢复应用程序时还原状态。

一切似乎都很好,但是我已经达到了一个奇怪的场景,不想适应这种模式。

假设我们有两个视图控制器,ViewControllerOneViewControllerTwo ,它们都存储一些成功恢复的任意状态。现在让我们假设ViewControllerOne有一个delegate属性,ViewControllerTwo是该委托(这是模态视图控制器的常见模式)。谁负责恢复这种关系?它应该如何存储/恢复?

在我的特殊情况下,不涉及故事板,恢复通过restorationClass属性在代码中进行。我的第一直觉是在 restorationClass 中创建视图控制器时尝试恢复关系,但是由于restorationClass不知道其他现有控制器,因此无法完全恢复这种关系。

或者,如果是声明 delegate 属性的视图控制器应该恢复关系,那么现在如何在其他类中恢复控制器实例?

简而言之,这似乎是一个记录不足的场景,我希望有人能对此有所了解。

我会说,任务落在委托视图控制器上,以将自己设置为这样,就像您在推送另一个视图控制器之前所做的那样。

关于如何实现这一目标,您有多种选择。

您可以将对视图控制器的弱引用存储在全局可访问的位置(例如,应用委托),并在application:didDecodeRestorableStateWithCoder:中使用这些值来设置委派 - 这就是此方法在 API 中的用途。

或者,您可以从委托侦听并将自己设置为委托的顶部视图控制器发布"hereIAmThisIsMe"通知(包含self部分用户信息)。

最新更新