Ja, beide Fälle möglich sind.
Bei Absturz können Sie mit UncaughtExceptionHandler Code ausführen. In Sie AppDelegate, registrieren Sie Handler, den Sie wie folgt aus:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
// Other didFinishLaunchingWithOptions code
Und Ihre Handler-Methode auf die gleiche .m-Datei
void uncaughtExceptionHandler(NSException *exception)
{
// App crashed, save last selected tabbar index to the to the NSUserDefaults
[[NSUserDefaults standardUserDefaults] setInteger:tabBarController.selectedIndex forKey:@"LastSelectedTabbarIndex"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
Während App läuft, fügen Sie den Überblick über zuletzt gewählte Tab-Leiste zu halten Controller, verwenden Sie UITabBarControllerDelegate
und speichern Sie den neu ausgewählten Tabbar-Index auf NSUserDefaults
. Kurzes Beispiel:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSUInteger tabIndex = [[tabBarController viewControllers] indexOfObject:viewController];
// I have newly selected index, now save it to the NSUserDefaults
}
Dieser Code wird letzte Tabbar Index zum NSUserDefaults
jedes Mal Tabbar des ausgewählten Indexänderungen ausgewählt speichern.
Wenn Sie schließlich startet App (in Ihrem didFinishLaunchingWithOptions
), lesen Sie zuletzt gespeichert Tabbar Index von NSUserDefaults
und setzen Tabbar des ausgewählten Index entsprechend
self.tabBarController.selectedIndex = lastSelectedIndexFromDefaults;
Edit: Wenn Sie auch UINavigationController
s Controller wiederherstellen müssen Stack, seine ziemlich schwierige Aufgabe. Ich gebe dir nur einen kurzen Überblick, was mir in den Sinn kommt.
Es gibt zwei Fälle:
- Sie haben benutzerdefinierte Ansicht Controller initializers und müssen benutzerdefinierte diesen Controller-Objekt übergeben - in diesem Fall seine fast unmöglich (in einer vernünftigen Zeit) implementieren diese
- Sie verwenden nur
-init
oder -initWithNibName...
: um View-Controller im Navigations-Stack zu initialisieren. Sie können Controller vom Stamm UINavigationController
der Registerkarte auflisten, ihre Klassennamen mit NSStringFromClass
abrufen und sie unter NSUserDefaults
speichern. Beim Start von Apps würden Sie die Prozedur umkehren (Controller initialisieren, indem Sie ihre Namen verwenden, die aus NSUserDefaults
gelesen werden, indem Sie etwa Folgendes verwenden: UIViewController *vc = [[NSClassFromString(@"aa") alloc] init];
).
dank für die Antwort Ihre Idee ist gut, aber ich besorgt ein bout, wie man all meine App mit navigaiton + tabar verwalten und auch zwei Arten von Login-Admin und verwenden ..? so, wie dies zu verwalten plus LoginScreen ... und die zugehörige Sitzung und Benutzer ..? –
Whooh ich denke, Sie müssen eine Klasse (serialisiert) machen und dann speichern Sie alle notwendigen Informationen wie Account-Typ, Registerkarte Index, Viewcontroller. Speichern Sie es in Benutzer-Standard als Nsdata – amar