Tengo un guión gráfico configurado con inicio de sesión en funcionamiento y controlador de vista principal, este último es el controlador de vista al que se navega al usuario cuando el inicio de sesión es exitoso. Mi objetivo es mostrar el controlador de vista principal inmediatamente si la autenticación (almacenada en el llavero) es exitosa y mostrar el controlador de vista de inicio de sesión si la autenticación falló. Básicamente, quiero hacer esto en mi 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
}
Sé sobre el método performSegueWithIdentifier: pero este método es un método de instancia de UIViewController, por lo que no se puede llamar desde AppDelegate. ¿Cómo hago esto usando mi guión gráfico existente?
EDITAR:
El controlador de vista inicial del Storyboard ahora es un controlador de navegación que no está conectado a nada. Usé la distinción setRootViewController: porque MainIdentifier es un UITabBarController. Entonces así es como se ven mis líneas:
- (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;
}
¡Las sugerencias / mejoras son bienvenidas!