W tej chwili trudno jest mi zrozumieć, co powinienem zrobić, aby zapisać i przywrócić stan mojej aplikacji.Zapisywanie i przywracanie stosów UINavigation w celu ponownego połączenia
Używam scenorysu i mam sporo kontrolerów ViewController i chcę zapisać wszystkie moje stosy nawigacyjne po zakończeniu aplikacji, aby móc przywrócić całą nawigację po ponownym uruchomieniu aplikacji przez użytkownika.
Używam UINavigationController
z innym UINavigationController wewnątrz to tylko dla informacji.
znalazłem to i przeczytać w kółko: https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/PreservingandRestoringState.html#//apple_ref/doc/uid/TP40007457-CH28-SW34
(Wymagane) Przypisanie identyfikatorów przywrócenie do kontrolerów widoku, którego konfigurację chcesz zachować; zobacz Oznaczanie kontrolerów widoku w celu zachowania.
(Wymagane) Poinformuj iOS, jak utworzyć lub zlokalizować nowe obiekty kontrolera widoku w czasie uruchamiania; zobacz Przywracanie kontrolerów widoku w Czas uruchomienia.
Potem dodał RestorationId
na wszystkich moich ViewControllers ale ja nie rozumiem, co należy zrobić dla drugiej części, co po dodaniu viewControllerWithRestorationIdentifierPath
metody nie zdam wewnątrz.
Próbowałem też zapisać navigation.viewcontrollers
do NSUserDefaults aby wykorzystać je ponownie, gdy użytkownik ponownie uruchomić aplikację przy użyciu kodu:
+(NSArray *) getNavStatus
{
NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
id objectSaved;
if((objectSaved = [preferences objectForKey:navStatusKey]) != nil)
return [NSKeyedUnarchiver unarchiveObjectWithData:objectSaved];
else
return nil;
}
+(BOOL) saveNavStatus:(UINavigationController *) nav
{
NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:nav.viewControllers];
[preferences setObject:encodedObject forKey:navStatusKey];
// Save to disk
return [preferences synchronize];
}
Ale kiedy wrócę w statystykach aplikacja Apple powiedzieć mnie, że ograniczenie nie jest przestrzegane i aplikacja się zawiesi, a kiedy dodam viewControllers w stosie mojej nawigacji, to się zawiesza :)
Wszelkie wskazówki lub pomoc będą mile widziane. Bardzo dziękuję
Czy zaimplementowano 'encodeRestorableStateWithCoder:' i 'decodeRestorableStateWithCoder:'? Możesz również sprawdzić ten samouczek. To ci pomoże. http://www.techotopia.com/index.php/An_iOS_6_iPhone_State_Preservation_and_Restoration_Tutorial –
Zrobiłem teraz, że mogę uzyskać przywrócenie, ale jak już powiedziałem, chcę zrobić to samo po zabiciu aplikacji, ale kiedy użytkownik ją zabije, przywracanie nie jest uruchamiane przy następnych uruchomieniach, więc czy istnieje sposób na jego wymuszenie? –
zgodnie z powyższym przywróceniem viewControllers stan jego nie będzie działać podczas ponownego uruchomienia aplikacji z rozciągnięcia. Domyślny stan nawigacji przywracania Apple nie zadziała w tym przypadku, ale możesz zrobić to samo z zapisem tego stanu użytkownika w DB i podczas gdy aplikacja otwiera się w tym czasie przywrócić go ręcznie programując logikę inną niż nie ma rozwiązania powyższego problemu, ale ta logika działa tylko z 3-4 push nawigacji, jeśli masz 7-8 push nawigacji, niż nie będzie działać. – CodeChanger