为什么我的应用程序在还原时不能返回到我的详细信息视图?
我的应用程序有一个简单的组织,我已经在界面生成器故事板(不是在代码中)configuration。 有一个导航视图控制器,其根视图控制器设置为我的主视图控制器。 我的主视图包含一个表格,其中单元格继续到Detail View Controller。
当我在查看详细视图的同时暂停应用程序,然后恢复它时,我返回到主视图,而不是详细视图。 为什么会这样?
细节:
我在界面生成器中为导航视图控制器,主视图控制器和细节视图控制器设置了恢复ID。 我也尝试添加一个恢复ID到表视图,并使主视图控制器实现UIDataSourceModelAssociation。
我的应用程序从shouldRestoreApplicationState返回YES,Main View和Detail View都有encode / decodeRestorableStateWithCoder方法。
我使用模拟器testing暂停/恢复:我运行应用程序,导航到详细信息视图,点击主页button,然后单击XCode中的停止button。 恢复,我从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”的恢复标识符path而不是“Navigation / MainView / DetailView”? 导航视图控制器和详细视图控制器之间没有直接的关系。 它们在Interface Builder中的唯一连接是通过主视图中的segue。
我有错误的configuration吗?
我曾尝试将恢复类分配给详细视图。 当该恢复代码被调用时,由于未在编码器中设置UIStateRestorationViewControllerStoryboardKey而失败。
这是我的项目的一个玩具版本,它复制了这个问题: https : //github.com/WanderingStar/RestorationTest
我试图用XCode版本5.0(5A1413)和iOS模拟器版本7.0(463.9.4),以防这些相关。
答案很简单:我没有打电话
[super encodeRestorableStateWithCoder:coder];
在我的视图控制器encodeRestorableStateWithCoder:编码器方法(并做相同的解码…)。
本教程帮助我逐步了解该过程的每个步骤,并找出我出错的地方: http : //useyourloaf.com/blog/2013/05/21/state-preservation-and-restoration.html
此外,事实certificate,“导航/ DetailView”是预期的。 导航视图控制器恢复其堆栈中的所有视图,然后将它们放回到堆栈中,而不是每个视图在堆栈中恢复后面的视图。
在“iOS应用程序编程指南”中的“状态保存和恢复”部分,有一个方便的清单 ,说明如何进行恢复工作。
看完你的代码后,你似乎忘了第3步,分配恢复类。 您的类没有这些属性,并且您没有在应用程序委托中实现viewControllerWithRestorationIdentifierPath
。
将恢复类别分配给相应的视图控制器。 (如果不这样做,应用程序委托会在恢复时提供相应的视图控制器。)请参见“在启动时恢复视图控制器”。