我的应用程序有一个简单的组织,我已在 Interface Builder 故事板中配置(不是在代码中)。有一个导航视图控制器,它的根视图控制器设置为我的主视图控制器。我的主视图包含一个表格,其中单元格连接到详细视图控制器。
当我在查看详细信息视图时暂停应用程序然后恢复它时,我将返回到主视图,而不是详细信息视图。为什么会这样?
细节:
我在界面生成器中为导航视图控制器、主视图控制器和详细视图控制器设置了恢复 ID。我还尝试将恢复 ID 添加到表视图并使主视图控制器实现 UIDataSourceModelAssociation。
我的应用程序从 shouldRestoreApplicationState 返回 YES 并且主视图和详细视图都有 encode/decodeRestorableStateWithCoder 方法。
我正在使用模拟器测试挂起/恢复:我运行应用程序,导航到详细信息视图,点击主页按钮,然后单击 XCode 中的停止按钮。为了恢复,我再次从 XCode 运行该应用程序。
我在挂起时看到以下调用:
AppDelegate shouldSaveApplicationState
MainViewController encodeRestorableStateWithCoder
DetailViewController encodeRestorableStateWithCoder
在简历上:
AppDelegate shouldRestoreApplicationState
AppDelegate viewControllerWithRestorationIdentifierPath Navigation
AppDelegate viewControllerWithRestorationIdentifierPath Navigation/MainView
MainViewController viewDidLoad
AppDelegate viewControllerWithRestorationIdentifierPath Navigation/DetailView
MainViewController decodeRestorableStateWithCoder
除了恢复错误的视图之外,还有一些奇怪的地方:为什么详细视图的恢复标识符路径是“Navigation/DetailView”而不是“Navigation/MainView/DetailView”?Navigation View Controller 和 Detail View Controller 之间没有直接关系。它们在 Interface Builder 中的唯一连接是通过 Main View 中的 segue。
我是否配置错误?
我尝试将恢复类分配给详细信息视图。调用该恢复代码时,它会失败,因为未在编码器中设置 UIStateRestorationViewControllerStoryboardKey。
这是我的项目的玩具版本,它复制了这个问题:https ://github.com/WanderingStar/RestorationTest
我正在尝试使用 XCode 版本 5.0 (5A1413) 和 iOS 模拟器版本 7.0 (463.9.4),以防万一。