在用户使用我的应用程序之前,他必须登录。登录后,构建数据库是因为我需要来自服务器的信息来构建它。
因此我的根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];
但控制器未显示。如果我使用上面的行,它确实有用。
我必须在哪里放置代码才能使其正常工作?
答案 0 :(得分:4)
发送viewDidAppear
时可能无法完全创建视图堆栈。因此,您应该使用perfomSelector:withDelay
在运行循环上对调用进行排队。通过这种方式,您可以确保在代码运行时构建视图堆栈。
干杯!
答案 1 :(得分:0)
我有类似的情况,我通过将代码移动到viewWillAppear(而不是viewDidAppear)来解决。值得一试。