Почему мой стек навигации не сохраняется при восстановлении приложения?

Итак, согласно моему сообщению здесь: Почему изменение ориентации моего приложения отклоняет мой родительский контроллер представления после восстановления состояния? У меня было обсуждение с другим пользователем, и мы пришли к выводу, что эта проблема связана с тем, что мой стек навигации не восстанавливается.

Резюме из этого поста: я могу успешно модально представить контроллеры из моего восстановленного VC, однако, когда я поворачиваю ориентацию устройства, чтобы отобразить один из модально представленных контроллеров представления, а затем продолжаю отклонять этот контроллер, приложение не возвращается к восстановленному контроллер. Если я не поворачиваю экран, он работает как положено.

Все мои контроллеры создаются через переходы в раскадровках. Всем сценам присваиваются идентификаторы восстановления в соответствующих раскадровках. Восстанавливаемый мной VC успешно восстанавливается, однако он больше не является частью стека навигации (navigationController оказывается нулевым).

Вот поток моего приложения, ведущий к последней сцене, в которой я восстанавливаю, где SWRevealController — это библиотека, которую я использую для боковой панели нашего приложения:

  1. Main.Storyboard — TempScreen (UIViewController)
  2. Навигация. Раскадровка — SWRevealViewController
  3. Navigation.Storyboard — MenuTableViewController (вид SWRevealController сзади)
  4. Navigation.Storyboard — ссылка на раскадровку MyPlaces (вид SWRevealController спереди)
  5. MyPlaces.storyboard — Места, Контроллер начального просмотра
  6. MyPlaces.storyboard — Детали места
  7. MyPlaces.storyboard — ссылка на раскадровку для взаимодействия
  8. Interaction.storyboard — CreateInteraction (это сцена, которая восстанавливается, где у меня возникают проблемы)

Как видите, есть много шагов, ведущих к сцене, которую я восстанавливаю. Сцена, которую я восстанавливаю, достигается через переход Push от нажатия кнопки.

Распечатывая identifierComponents в методе viewControllerWithRestorationIdentifierPath в AppDelegate, я обнаружил кое-что интересное. Вот что напечатала каждая итерация:

  1. TempScreen
  2. TempScreen, Navigation (вид сзади для SWRevealController)
  3. TempScreen, навигация, menuTableViewController
  4. TempScreen, Navigation, MyPlacesNavController (контроллер инициализации навигации для MyPlaces.storyboard)
  5. TempScreen, Навигация, MyPlacesNavController, Места (VC)
  6. TempScreen, Навигация, MyPlacesNavController, Places (VC), PlaceDetail
  7. TempScreen, Navigation, MyPlacesNavController, Interaction ‹--- Что случилось с Places и PlaceDetail?

person Michael McKenna    schedule 13.07.2017    source источник