Почему мое приложение не возвращается к подробному виду после восстановления?
Мое приложение имеет простую организацию, которую я настроил в раскадровке Interface Builder (не в коде). Есть Контроллер Представления Навигации, у которого его Контроллер Root View установлен в мой Главный Контроллер Представления. Мое главное представление содержит таблицу, в которой ячейки переходят в контроллер подробного представления.
Когда я приостанавливаю приложение, просматривая подробный вид, а затем возобновляю его, я возвращаюсь в основной вид, а не в подробный вид. Почему это может быть?
Подробности:
Я установил идентификаторы восстановления в Интерфейсном Разработчике для Контроллера Представления Навигации, Контроллера Главного Представления и Контроллера Детального Представления. Я также попытался добавить идентификатор восстановления в табличное представление и заставить контроллер основного представления реализовать UIDataSourceModelAssociation.
Мое приложение возвращает YES из shouldRestoreApplicationState, и оба основных вида и подробный вид имеют методы encode / decodeRestorableStateWithCoder.
Я тестирую приостановку / возобновление с помощью симулятора: я запускаю приложение, перехожу к подробному виду, нажимаю кнопку «Домой» и затем нажимаю кнопку «Стоп» в XCode. Чтобы возобновить, я снова запускаю приложение из 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», а не «Navigation / MainView / DetailView»? Нет прямой связи между контроллером навигационного представления и контроллером подробного просмотра. Их единственное соединение в Интерфейсном Разработчике через переход от Главного Представления.
Я что-то неправильно настроил?
Я попытался назначить класс восстановления в подробном представлении. Когда этот код восстановления вызывается, он терпит неудачу, потому что UIStateRestorationViewControllerStoryboardKey не установлен в кодере.
Вот игрушечная версия моего проекта, которая повторяет проблему:https://github.com/WanderingStar/RestorationTest
Я пытаюсь сделать это с версией XCode 5.0 (5A1413) и iOS Simulator Version 7.0 (463.9.4), на случай, если они актуальны.