У мене створена розкадрована дошка з робочим контролером для входу та основного перегляду; останній - це контролер перегляду, до якого користувач переходить, коли вхід успішний. Моя мета - негайно показати основний контролер подання даних, якщо аутентифікація (збережена в брелоку) успішна, і показати контролер перегляду входу, якщо аутентифікація не вдалася. В основному, я хочу це зробити у своєму 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. Як це зробити за допомогою моєї існуючої раскадровки ??
Редагувати:
Початковий контролер перегляду 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;
}
Пропозиції / покращення вітаються!