Итак, согласно моему сообщению здесь: Почему изменение ориентации моего приложения отклоняет мой родительский контроллер представления после восстановления состояния? У меня было обсуждение с другим пользователем, и мы пришли к выводу, что эта проблема связана с тем, что мой стек навигации не восстанавливается.
Резюме из этого поста: я могу успешно модально представить контроллеры из моего восстановленного VC, однако, когда я поворачиваю ориентацию устройства, чтобы отобразить один из модально представленных контроллеров представления, а затем продолжаю отклонять этот контроллер, приложение не возвращается к восстановленному контроллер. Если я не поворачиваю экран, он работает как положено.
Все мои контроллеры создаются через переходы в раскадровках. Всем сценам присваиваются идентификаторы восстановления в соответствующих раскадровках. Восстанавливаемый мной VC успешно восстанавливается, однако он больше не является частью стека навигации (navigationController оказывается нулевым).
Вот поток моего приложения, ведущий к последней сцене, в которой я восстанавливаю, где SWRevealController — это библиотека, которую я использую для боковой панели нашего приложения:
- Main.Storyboard — TempScreen (UIViewController)
- Навигация. Раскадровка — SWRevealViewController
- Navigation.Storyboard — MenuTableViewController (вид SWRevealController сзади)
- Navigation.Storyboard — ссылка на раскадровку MyPlaces (вид SWRevealController спереди)
- MyPlaces.storyboard — Места, Контроллер начального просмотра
- MyPlaces.storyboard — Детали места
- MyPlaces.storyboard — ссылка на раскадровку для взаимодействия
- Interaction.storyboard — CreateInteraction (это сцена, которая восстанавливается, где у меня возникают проблемы)
Как видите, есть много шагов, ведущих к сцене, которую я восстанавливаю. Сцена, которую я восстанавливаю, достигается через переход Push от нажатия кнопки.
Распечатывая identifierComponents
в методе viewControllerWithRestorationIdentifierPath
в AppDelegate
, я обнаружил кое-что интересное. Вот что напечатала каждая итерация:
- TempScreen
- TempScreen, Navigation (вид сзади для SWRevealController)
- TempScreen, навигация, menuTableViewController
- TempScreen, Navigation, MyPlacesNavController (контроллер инициализации навигации для MyPlaces.storyboard)
- TempScreen, Навигация, MyPlacesNavController, Места (VC)
- TempScreen, Навигация, MyPlacesNavController, Places (VC), PlaceDetail
- TempScreen, Navigation, MyPlacesNavController, Interaction ‹--- Что случилось с Places и PlaceDetail?