Ich habe ein Storyboard mit funktionierendem Login und Hauptansichts-Controller eingerichtet. Letzteres ist der View-Controller, zu dem der Benutzer navigiert, wenn die Anmeldung erfolgreich ist. Mein Ziel ist es, den Hauptansichts-Controller sofort anzuzeigen, wenn die Authentifizierung (im Schlüsselbund gespeichert) erfolgreich ist, und den Anmeldeansichts-Controller anzuzeigen, wenn die Authentifizierung fehlgeschlagen ist. Grundsätzlich möchte ich dies in meinem AppDelegate tun:
// url request & response work fine, assume success is a BOOL here
// that indicates whether login was successful or not
if (success) {
// 'push' main view controller
} else {
// 'push' login view controller
}
Ich kenne die Methode performSegueWithIdentifier: Diese Methode ist jedoch eine Instanzmethode von UIViewController und kann daher nicht in AppDelegate aufgerufen werden. Wie mache ich das mit meinem vorhandenen Storyboard?
BEARBEITEN:
Der anfängliche Ansichts-Controller des Storyboards ist jetzt ein Navigations-Controller, der mit nichts verbunden ist. Ich habe den Unterschied setRootViewController: verwendet, da MainIdentifier ein UITabBarController ist. Dann sehen meine Zeilen so aus:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL isLoggedIn = ...; // got from server response
NSString *segueId = isLoggedIn ? @"MainIdentifier" : @"LoginIdentifier";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:segueId];
if (isLoggedIn) {
[self.window setRootViewController:initViewController];
} else {
[(UINavigationController *)self.window.rootViewController pushViewController:initViewController animated:NO];
}
return YES;
}
Vorschläge / Verbesserungen sind willkommen!