在过去,我的应用只有一个主视图控制器(MainViewController
)和一个登录视图控制器(LoginViewController
),但现在我正在转向标签栏控制器。
在我能够对viewDidLoad
MainViewController
进行简单检查之前,是否存在密钥链中的用户名和密码。如果没有用户名和密码,我使用segue弹出模态登录视图控制器。
使用Tab Bar Controller的新设置我仍然只有一个视图控制器(MainViewController
),它是根视图控制器(截至目前),我试图做同样的事情,它弹出登录屏幕的模式。
现在我在viewDidLoad
的{{1}}中调用segue:
MainViewController
我收到此错误:
[self performSegueWithIdentifier:@"loadLoginView" sender:nil];
但是,如果我将一个按钮与一个通过segue加载 Warning: Attempt to present <LoginViewController: 0x1757cd80> on <UITabBarController: 0x17571e50> whose view is not in the window hierarchy!
的方法相关联,那么它可以正常工作。我在LoginViewController
这样做:
MainViewController
我可以从错误消息中看到,当我尝试从-(void)loadLogin
{
[self performSegueWithIdentifier:@"loadLoginView" sender:nil];
}
viewDidLoad
执行segue时,它正在尝试从MainViewController
加载LoginViewController
。
为什么我无法从UITabBarController
的{{1}}加载LoginViewController
?
任何帮助都会很棒。
谢谢!
答案 0 :(得分:1)
在将视图控制器堆栈添加到窗口之前,似乎会调用-viewDidLoad
。你可以尝试两件事:
延迟到下一次运行循环(这应该让视图控制器有时间到位)[self performSelector:@selector(loadLogin) withObject:self afterDelay:0];
。此方法不允许您直接调用带有两个参数的方法
您可以使用-presentViewController: animated: completion:
。这将导致您的登录控制器从底部滑入。