Dlaczego moja aplikacja nie powraca do mojego widoku szczegółów po przywróceniu?

Moja aplikacja ma prostą organizację, którą skonfigurowałem w storyboardie Interface Builder (nie w kodzie). Dostępny jest kontroler widoku nawigacji, którego kontroler widoku głównego jest ustawiony na kontroler głównego widoku. Mój widok główny zawiera tabelę, w której komórki przechodzą do kontrolera widoku szczegółowego.

Gdy zawiesię aplikację, patrząc na widok szczegółów, a następnie wznowię ją, powracam do widoku głównego, a nie widoku szczegółowego. Dlaczego tak może być?

Detale:

Ustawiłem identyfikatory przywracania w Konstruktorze interfejsu dla kontrolera widoku nawigacji, kontrolera widoku głównego i kontrolera widoku szczegółowego. Próbowałem również dodać identyfikator przywracania do widoku tabeli i sprawić, że główny kontroler widoku implementuje powiązanie UIDataSourceModelAssociation.

Moja aplikacja zwraca TAK z shouldRestoreApplicationState i zarówno Widok Główny, jak i Widok Szczegółowy mają metody kodowania / dekodowaniaRestountStateWithCoder.

Testuję zawieszenie / wznowienie korzystania z symulatora: uruchamiam aplikację, przechodzę do widoku szczegółowego, klikam przycisk home, a następnie klikam przycisk stop w XCode. Aby wznowić, uruchomię aplikację ponownie z XCode.

Widzę następujące wezwania do zawieszenia:

AppDelegate shouldSaveApplicationState
MainViewController encodeRestorableStateWithCoder
DetailViewController encodeRestorableStateWithCoder

A po wznowieniu:

AppDelegate shouldRestoreApplicationState
AppDelegate viewControllerWithRestorationIdentifierPath Navigation
AppDelegate viewControllerWithRestorationIdentifierPath Navigation/MainView
MainViewController viewDidLoad
AppDelegate viewControllerWithRestorationIdentifierPath Navigation/DetailView
MainViewController decodeRestorableStateWithCoder

Oprócz przywracania niewłaściwego widoku, istnieje coś innego dziwnego: Dlaczego ścieżka identyfikatora przywrócenia dla widoku szczegółowego „Nawigacja / widok szczegółowy”, a nie „Nawigacja / Widok główny / Widok szczegółowy”? Nie ma bezpośredniego związku między kontrolerem widoku nawigacji a kontrolerem widoku szczegółowego. Ich jedynym połączeniem w Konstruktorze interfejsów jest segue z widoku głównego.

Czy coś źle skonfigurowałem?

Próbowałem przypisać klasę przywracania do widoku szczegółowego. Po wywołaniu tego kodu przywracania kończy się on niepowodzeniem, ponieważ klucz UIStateRestorationViewControllerStoryboardKey nie jest ustawiony w koderze.

Oto zabawkowa wersja mojego projektu, która powiela problem:https://github.com/WanderingStar/RestorationTest

Próbuję tego z XCode w wersji 5.0 (5A1413) i symulatorem iOS w wersji 7.0 (463.9.4), na wypadek, gdyby były one istotne.

questionAnswers(2)

yourAnswerToTheQuestion