在加载另一个ViewController时呈现模态视图控制器

时间:2011-06-19 22:36:33

标签: iphone ios uikit

在用户使用我的应用程序之前,他必须登录。登录后,构建数据库是因为我需要来自服务器的信息来构建它。

因此我的根ViewController是LoginViewController,它在成功登录时以模态方式呈现实际应用程序(navigationController堆栈)。

如果用户已在应用程序启动时登录(我使用NSUserDefaults存储凭据),则LoginViewController应立即显示该应用程序。因此我覆盖了这个方法:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSInteger userId = [[NSUserDefaults standardUserDefaults] integerForKey:@"selfUser"];
    if (userId != 0) {
        //[self performSelector:@selector(presentMainViewController) withObject:nil afterDelay:2];
        [self presentMainViewController];
    }
}
- (void)presentMainViewController {
    mainViewController = [[MainViewController alloc] init];
    mainViewController.managedObjectContext = managedObjectContext;
    navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
    navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:navigationController animated:NO];
}

执行[self presentMainViewController];但控制器未显示。如果我使用上面的行,它确实有用。

我必须在哪里放置代码才能使其正常工作?

2 个答案:

答案 0 :(得分:4)

发送viewDidAppear时可能无法完全创建视图堆栈。因此,您应该使用perfomSelector:withDelay在运行循环上对调用进行排队。通过这种方式,您可以确保在代码运行时构建视图堆栈。

干杯!

答案 1 :(得分:0)

我有类似的情况,我通过将代码移动到viewWillAppear(而不是viewDidAppear)来解决。值得一试。