Mam scenorys skonfigurowany z działającym logowaniem i głównym kontrolerem widoku, ten ostatni jest kontrolerem widoku, do którego przechodzi użytkownik po pomyślnym zalogowaniu. Moim celem jest natychmiastowe pokazanie kontrolera widoku głównego, jeśli uwierzytelnianie (przechowywane w pęku kluczy) powiedzie się, i pokazanie kontrolera widoku logowania, jeśli uwierzytelnienie się nie powiodło. Zasadniczo chcę to zrobić w mojej 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
}
Wiem o metodzie performSegueWithIdentifier: ale ta metoda jest metodą instancji UIViewController, więc nie można jej wywołać z poziomu AppDelegate. Jak to zrobić, korzystając z mojej istniejącej serii ujęć?
EDYTOWAĆ:
Początkowy kontroler widoku Storyboard jest teraz kontrolerem nawigacji, który nie jest z niczym połączony. Użyłem setRootViewController: rozróżnienie, ponieważ MainIdentifier to UITabBarController. A więc tak wyglądają moje linie:
- (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;
}
Sugestie / ulepszenia są mile widziane!