У меня есть раскадровка с рабочим контроллером входа в систему и основного представления, последний является контроллером представления, к которому пользователь перемещается при успешном входе в систему.Моя цель состоит в том, чтобы немедленно показать контроллер основного представления, если аутентификация (сохраненная в цепочке для ключей), успешна, и показать контроллер представления входа в систему, если аутентификация не удалась.По сути, я хочу сделать это в своем 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
}
Я знаю о методе executeSegueWithIdentifier: но этот метод является методом экземпляра UIViewController, поэтому его нельзя вызывать из AppDelegate.Как мне сделать это, используя мою существующую раскадровку ??
РЕДАКТИРОВАТЬ:
Контроллер первоначального представления Storyboard теперь является контроллером навигации, который ни к чему не подключен.Я использовал 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;
}
Предложения / улучшения приветствуются!