为什么在恢复应用时我的导航堆栈不会被保留?

时间:2017-07-13 21:44:52

标签: ios swift uikit-state-preservation

根据我在这里的帖子:Why is changing my app's orientation dismissing my parent view controller after state restoration?我与另一位用户进行了讨论,我们得出结论,这个问题与我的导航堆栈没有被恢复有关。

该帖子的摘要 - 我可以成功地从我恢复的VC中模拟呈现控制器,但是,当我旋转设备方向以显示其中一个模态呈现的视图控制器然后继续关闭该控制器时,应用程序不会返回到恢复的控制器。如果我不旋转屏幕,它会按预期工作。

我的所有控制器都是通过Storyboard中的segue实例化的。所有场景都在其各自的故事板中提供了恢复标识符。我正在恢复的VC已成功恢复,但它不再是导航堆栈的一部分(navigationController即将出现为零)。

这是我的应用程序的流程,直到我正在恢复的最后一个场景,其中SWRevealController是我正在用于我们的应用程序侧边栏的库:

  1. Main.Storyboard - TempScreen(UIViewController)
  2. Navigation.Storyboard - SWRevealViewController
  3. Navigation.Storyboard - MenuTableViewController(SWRevealController的后视图)
  4. Navigation.Storyboard - 对MyPlaces的故事板参考(SWRevealController的前视图)
  5. MyPlaces.storyboard - 地方,初始视图控制器
  6. MyPlaces.storyboard - 放置详细信息
  7. MyPlaces.storyboard - 故事板对交互的引用
  8. Interaction.storyboard - CreateInteraction(这是我遇到问题时正在恢复的场景)
  9. 正如你所看到的那样,有很多步骤可以达到我正在恢复的状态。我正在恢复的场景是通过按下按钮的推送来实现的。

    identifierComponents的{​​{1}}方法中打印viewControllerWithRestorationIdentifierPath时,我发现了一些有趣的内容。以下是每次迭代打印的内容:

    1. TempScreen
    2. TempScreen,导航(SWRevealController的后视图)
    3. TempScreen,Navigation,menuTableViewController
    4. TempScreen,导航,MyPlacesNavController(MyPlaces.storyboard的初始导航控制器)
    5. TempScreen,导航,MyPlacesNavController,地方(VC)
    6. TempScreen,导航,MyPlacesNavController,地方(VC),PlaceDetail
    7. TempScreen,Navigation,MyPlacesNavController,Interaction< --- Places和PlaceDetail发生了什么变化?

0 个答案:

没有答案