ios - 为什么我的应用程序恢复后不返回到我的详细 View ?

标签 ios objective-c xcode state-restoration

我的应用程序有一个简单的组织,我已在 Interface Builder Storyboard(而不是代码)中对其进行了配置。有一个导航 View Controller ,其 Root View Controller 设置为我的主视图 Controller 。我的主视图包含一个表格,其中单元格连接到详细 View Controller 。

当我在查看详细信息 View 时暂停应用程序然后恢复它时,我将返回到主视图,而不是详细信息 View 。为什么会这样?

详细信息:

我已经在 Interface Builder 中为导航 View Controller 、主视图 Controller 和详细 View Controller 设置了恢复 ID。我还尝试向 TableView 添加恢复 ID 并使主视图 Controller 实现 UIDataSourceModelAssociation。

我的应用程序从 shouldRestoreApplicationState 返回 YES,并且主视图和详细信息 View 都有编码/解码RestorableStateWithCoder 方法。

我正在使用模拟器测试挂起/恢复:我运行应用程序,导航到详细信息 View ,单击主页按钮,然后单击 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

除了恢复错误的 View 之外,还有一些奇怪的事情:为什么详细 View 的恢复标识符路径是“Navigation/DetailView”而不是“Navigation/MainView/DetailView”?导航 View Controller 和详细 View Controller 之间没有直接关系。它们在 Interface Builder 中的唯一连接是通过主视图中的 segue。

我是否配置错误?

我尝试将恢复等级分配给详细 View 。当调用该恢复代码时,它会失败,因为编码器中未设置 UIStateRestorationViewControllerStoryboardKey。

这是我的项目的一个玩具版本,它复制了该问题:https://github.com/WanderingStar/RestorationTest

我正在使用 XCode 版本 5.0 (5A1413) 和 iOS Simulator 版本 7.0 (463.9.4) 尝试此操作,以防相关。

最佳答案

答案很简单:我没有打电话

[super encodeRestorableStateWithCoder:coder];

在我的 View Controller 中的 encodeRestorableStateWithCoder:coder 方法中(并在解码中执行相同的操作...),这就是在编码器中设置 Storyboard 的内容。

本教程帮助我逐步完成该过程的每个步骤,并找出我出错的地方: http://useyourloaf.com/blog/2013/05/21/state-preservation-and-restoration.html

此外,事实证明“Navigation/DetailView”是预期的。导航 View Controller 恢复其堆栈中的所有 View ,然后将它们放回堆栈中,而不是每个 View 都恢复堆栈中后面的 View 。

关于ios - 为什么我的应用程序恢复后不返回到我的详细 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19218235/

相关文章:

iphone - Objective-C : How do I draw lines with alpha in quad curve

ios - iOS8 上 Split View Controller 中的容器 View

iphone - 如何在运行时将一行插入 iPhone 上的 UITableView?

ios - 在启动屏幕中执行代码已更新

iphone - UITextView 对齐方式正在自行更改

ios - 使用 SharedData 在 iPhone 和 Watch 之间传递更新

objective-c - NSDateComponents 中的纪元是什么意思?

ios - 华氏度/摄氏度符号 ASCII NSString

ios - 如何在 Swift 中组合两个 Dictionary 实例?

ios - 使用列表 NSDitonary swift 写入和读取文件