7

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

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

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

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

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

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

4

1 回答 1

3

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

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

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

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

于 2013-12-20T22:14:10.140 回答