Çalışan oturum açma ve ana görünüm denetleyicisiyle oluşturulmuş bir film şeridim var, ikincisi, oturum açma başarılı olduğunda kullanıcının yönlendirildiği görünüm denetleyicisidir. Amacım, kimlik doğrulama (anahtar zincirinde saklanan) başarılı olursa ana görünüm denetleyicisini hemen göstermek ve kimlik doğrulama başarısız olursa oturum açma görünümü denetleyicisini göstermektir. Temel olarak, bunu AppDelegate'imde yapmak istiyorum:
// 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 yöntemini biliyorum: ancak bu yöntem UIViewController'ın bir örnek yöntemidir, bu nedenle AppDelegate içinden çağrılamaz. Bunu mevcut film şeridimi kullanarak nasıl yaparım?
DÜZENLE:
Storyboard'un ilk görünüm denetleyicisi artık hiçbir şeye bağlı olmayan bir gezinme denetleyicisidir. SetRootViewController: ayrımını kullandım çünkü MainIdentifier bir UITabBarController. O zaman repliklerim şöyle görünüyor:
- (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;
}
Önerilere / iyileştirmelere açığız!