Ho uno storyboard impostato con accesso funzionante e controller di visualizzazione principale, quest'ultimo è il controller di visualizzazione a cui l'utente viene indirizzato quando l'accesso ha esito positivo. Il mio obiettivo è mostrare immediatamente il controller della vista principale se l'autenticazione (memorizzata nel portachiavi) ha esito positivo e mostrare il controller della vista di accesso se l'autenticazione non è riuscita. Fondamentalmente, voglio farlo nel mio AppDelegate:
// 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
}
Conosco il metodo performSegueWithIdentifier: ma questo metodo è un metodo di istanza di UIViewController, quindi non richiamabile da AppDelegate. Come posso farlo usando il mio storyboard esistente?
MODIFICARE:
Il controller di visualizzazione iniziale dello Storyboard ora è un controller di navigazione che non è connesso a nulla. Ho usato setRootViewController: distinction perché MainIdentifier è un UITabBarController. Quindi questo è l'aspetto delle mie linee:
- (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;
}
Suggerimenti / miglioramenti sono i benvenuti!