Если сториборду, то моя тактика обычно такая:
1. Создаю InitialController, назначаю его initial в сториборде.
2. В нем в viewDidLoad проверяю, есть ли пользователь, авторизован ли и отображают тот контроллер, который мне нужен:
- (void)viewDidLoad
{
[super viewDidLoad];
[self checkAuth];
}
- (void)checkAuth
{
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *navController;
if (![AUUser currentUser]) {
navController = [storyboard instantiateViewControllerWithIdentifier:@"authContainer"];
} else {
navController = [storyboard instantiateViewControllerWithIdentifier:@"mainViewContainer"];
}
navController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
navController.view.frame = self.view.bounds;
[self addChildViewController:navController];
[self.view addSubview:navController.view];
self.currentController = navController;
}