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.