Comece tradicionalmente em diferentes lugares no storyboard a partir do AppDelegate

Tenho um storyboard configurado com o login de trabalho e o controlador de vista principal; este último é o controlador de vista para o qual o usuário é navegado quando o login é bem-sucedido. Meu objetivo é mostrar o controlador de exibição principal imediatamente se a autenticação (armazenada no chaveiro) for bem-sucedida e mostrar o controlador de exibição de logon 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 esse método é um método de instância do UIViewController, portanto não pode ser chamado no AppDelegate. Como faço isso usando meu storyboard existente ??

EDITAR

controlador de visualização inicial do Storyboard agora é um controlador de navegação que não está conectado a nada. Eu usei a distinção setRootViewController: 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!

questionAnswers(10)

yourAnswerToTheQuestion