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