J'ai un storyboard configuré avec une connexion fonctionnelle et un contrôleur de vue principal, ce dernier est le contrôleur de vue vers lequel l'utilisateur est dirigé lorsque la connexion est réussie. Mon objectif est d'afficher immédiatement le contrôleur de vue principal si l'authentification (stockée dans le trousseau) est réussie, et d'afficher le contrôleur de vue de connexion si l'authentification a échoué. Fondamentalement, je veux faire cela dans mon 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
}
Je connais la méthode performSegueWithIdentifier: mais cette méthode est une méthode d'instance de UIViewController, donc non appelable depuis AppDelegate. Comment puis-je faire cela en utilisant mon storyboard existant?
ÉDITER:
Le contrôleur de vue initial du Storyboard est maintenant un contrôleur de navigation qui n'est connecté à rien. J'ai utilisé le setRootViewController: distinction car MainIdentifier est un UITabBarController. Alors voici à quoi ressemblent mes lignes:
- (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;
}
Les suggestions / améliorations sont les bienvenues!