因此,根据我在此处的帖子:为什么在状态恢复后更改我的应用程序的方向会解雇我的父视图控制器?我与另一个用户进行了讨论,我们得出的结论是这个问题与我的导航堆栈没有恢复有关。
该帖子的摘要 - 我可以从我恢复的 VC 成功地以模态方式呈现控制器,但是,当我旋转设备方向以显示一个模态呈现的视图控制器然后继续关闭该控制器时,应用程序不会返回到恢复的控制器。如果我不旋转屏幕,它会按预期工作。
我所有的控制器都通过故事板中的 segues 实例化。所有场景都在各自的情节提要中获得了修复标识符。我正在恢复的 VC 已成功恢复,但它不再是导航堆栈的一部分(navigationController 将变为 nil)。
这是我的应用程序的流程,直到我正在恢复的最后一个场景,其中 SWRevealController 是我用于我们应用程序侧边栏的库:
- Main.Storyboard - TempScreen (UIViewController)
- Navigation.Storyboard - SWRevealViewController
- Navigation.Storyboard - MenuTableViewController(SWRevealController 的后视图)
- Navigation.Storyboard - MyPlaces 的故事板参考(SWRevealController 的前视图)
- MyPlaces.storyboard - 地点,初始视图控制器
- MyPlaces.storyboard - 地点详情
- MyPlaces.storyboard - 交互的情节提要参考
- Interaction.storyboard - CreateInteraction(这是正在恢复的我遇到问题的场景)
正如你所看到的,有很多步骤可以到达我正在恢复的场景。我正在恢复的场景是通过按下按钮的 Push segue 到达的。
在打印identifierComponents
中的viewControllerWithRestorationIdentifierPath
方法内时AppDelegate
,我发现了一些有趣的东西。以下是每次迭代打印的内容:
- 温度屏幕
- TempScreen、导航(SWRevealController 的后视图)
- TempScreen、导航、菜单表视图控制器
- TempScreen、Navigation、MyPlacesNavController(MyPlaces.storyboard 的初始化导航控制器)
- TempScreen、导航、MyPlacesNavController、地点 (VC)
- TempScreen、导航、MyPlacesNavController、Places (VC)、PlaceDetail
- TempScreen、Navigation、MyPlacesNavController、Interaction <--- Places 和 PlaceDetail 发生了什么?