Eu tenho um storyboard configurado com login funcional e controlador de visualização principal, o último é o controlador de visualização para o qual o usuário é navegado quando o login é bem-sucedido. Meu objetivo é mostrar o controlador de visualização principal imediatamente se a autenticação (armazenada no keychain) for bem-sucedida e mostrar o controlador de visualização de login se a autenticação falhar. Basicamente, quero fazer isso no meu 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
}
Eu sei sobre o método performSegueWithIdentifier: mas este método é um método de instância de UIViewController, portanto, não pode ser chamado de dentro de AppDelegate. Como faço isso usando meu storyboard existente?
EDITAR:
O controlador de visualização inicial do Storyboard agora é um controlador de navegação que não está conectado a nada. Usei setRootViewController: distinção porque MainIdentifier é um UITabBarController. Então é assim que minhas linhas se parecem:
- (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;
}
Sugestões / melhorias são bem-vindas!