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

4

在用户使用我的应用程序之前,他必须登录。登录后,由于我需要从服务器获取信息来构建数据库,因此会构建数据库。

因此,我的根视图控制器是LoginViewController,在成功登录时以模态方式呈现实际应用程序(导航控制器堆栈)。

如果用户在应用程序启动时已经登录(我使用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];
}
< p > [self presentMainViewController]; 被执行了,但是控制器没有显示出来。如果我使用上面的那行代码就可以工作。

我应该把这段代码放在哪里才能使它起作用?


你尝试过在委托上展示登录界面吗?您可以在应用启动时呈现登录界面,如果用户已经登录,则展示应用程序。 - Mat
请问您能否发布presentMainViewController方法的主体内容吗?根据我的经验,-viewDidAppear和-viewWillAppear都可以用于呈现模态视图控制器。 - axiixc
@mat 我不明白。我确实从应用程序委托中呈现了loginViewController,并从loginViewController呈现了应用程序。 @axiixc 完成。 - Alexander Theißen
如果您使用0秒的延迟调用performSelector:...,它是否也能正常工作? - Morten Fast
是的,确实如此!但肯定有某个BUG存在。难道不应该在没有这个“技巧”的情况下工作吗? - Alexander Theißen
这不是把戏。 :) 通过带有延迟的 performSelector 调用(即使延迟为 0),您正在将执行移动到运行循环的下一次运行,然后当前视图堆栈已完全设置好。 - Morten Fast
2个回答

4

当发送viewDidAppear时,视图堆栈可能尚未完全创建。因此,您应该使用perfomSelector:withDelay将调用排队到运行循环中。这样,您可以确保在代码运行时视图堆栈已经构建。

干杯!


1
在iOS7(可能还有更早的版本)中,选择器是performSelector:withObject:afterDelay: - ericsoco

0

我曾经遇到过类似的情况,我通过将代码移动到viewWillAppear(而不是viewDidAppear)中解决了这个问题。值得一试。


2
也不起作用。我创建了一个按钮,它也调用了 [self presentMainViewController];。这个按钮很好用。有趣的是:如果我把上面的代码放在 viewDidAppear 中,按钮也不起作用。在 viewWillAppear 中,按钮可以工作。但这当然不能解决我的问题。 - Alexander Theißen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接