Условно запускать в разных местах раскадровки из AppDelegate

У меня есть раскадровка с рабочим логином и основным контроллером представления, последний является контроллером представления, к которому пользователь переходит при успешном входе в систему. Моя цель - немедленно показать главный контроллер представления, если аутентификация (хранящаяся в цепочке ключей) прошла успешно, и показать контроллер представления входа в систему, если аутентификация не удалась. По сути, я хочу сделать это в моем 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
}

Я знаю о методе performSegueWithIdentifier: но этот метод является методом экземпляра UIViewController, поэтому его нельзя вызвать из AppDelegate. Как мне это сделать, используя мою существующую раскадровку ??

РЕДАКТИРОВАТЬ:

Начальный контроллер представления раскадровки теперь является контроллером навигации, который ни к чему не подключен. Я использовал различие setRootViewController:, потому что MainIdentifier - это UITabBarController. Тогда вот как выглядят мои строки:

- (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;
}

Предложения / улучшения приветствуются!

107
задан mmvie 13 December 2011 в 00:06
поделиться