从UITabBarController发出加载View Controller的问题

时间:2013-07-03 20:25:53

标签: ios objective-c

在过去,我的应用只有一个主视图控制器(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

任何帮助都会很棒。

谢谢!

1 个答案:

答案 0 :(得分:1)

在将视图控制器堆栈添加到窗口之前,似乎会调用-viewDidLoad。你可以尝试两件事:

延迟到下一次运行循环(这应该让视图控制器有时间到位)[self performSelector:@selector(loadLogin) withObject:self afterDelay:0];。此方法不允许您直接调用带有两个参数的方法

您可以使用-presentViewController: animated: completion:。这将导致您的登录控制器从底部滑入。