用于登录ios的UINavigationController流程

Apo*_*llo 1 objective-c ios

解决了:

用户登录/注册后,使用以下代码转换到主故事板...

 UIWindow* window = [[UIApplication sharedApplication] keyWindow];

 window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];
Run Code Online (Sandbox Code Playgroud)

我有以下UINavigationController流来处理登录... tabbarcontroller进入作为viewcontroller的根的uinavigationcontroller之后的顶部segue.

在此输入图像描述

当用户已经登录时,执行"this segue works",以便用户不必登录登录屏幕.这非常有效.我遇到的问题是当用户必须登录时...从登录/注册屏幕到登录屏幕的segue工作正常,但当我从登录屏幕转到标签栏时,会发生以下情况:

在此输入图像描述

这真的不应该发生,因为我在viewcontroller.m中有以下代码(此处被调用)

- (void)viewDidLoad {
    ...
    self.navigationItem.title = @"Messages";
    self.navigationItem.hidesBackButton = YES;

    NSLog(@"gotten to here");
    ...
}
Run Code Online (Sandbox Code Playgroud)

有人知道为什么会这样吗?

and*_*azz 5

我喜欢将我的登录流程与正常的应用程序流程分开.这意味着我没有将登录界面中的segue链接到应用程序,但是我在AppDelegate中处理了这个:

if ([MyUserHandler sharedHelper].isAuthenticated) {
    [self presentMainInterface];
} else {
    [self presentWelcomeInterface];
}
Run Code Online (Sandbox Code Playgroud)

第一种方法执行此操作:

- (void)presentMainInterface
{
    self.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];
}
Run Code Online (Sandbox Code Playgroud)

另一个呈现登录屏幕:

- (void)presentWelcomeInterface
{   
    UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"loginScreen"];

    UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController];
    self.window.rootViewController = navigation;
}
Run Code Online (Sandbox Code Playgroud)

这样,只有在未对用户进行身份验证时才会加载登录屏幕.