目前的ViewController错误

时间:2014-10-03 13:56:27

标签: objective-c xcode cocoa-touch

在我的故事板中,我有两个UIViewControllers。初始视图控制器是一个显示简单图像的加载/启动屏幕。第二个视图控制器是UIWebView。

我正在尝试在应用程序完全加载后用UIWebView视图控制器替换加载视图控制器。

在我的加载视图控制器中,我有这个代码来呈现UIWebView:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"WebView"];

[self presentViewController:viewController animated:NO completion:^(void){}];

但是,此代码会引发以下错误:

Warning: Attempt to present <WebController: 0x145617960> on <LoadingController: 0x145610c40> whose view is not in the window hierarchy!

我做错了吗?

感谢您提供任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

如果你的代码块:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"WebView"];

[self presentViewController:viewController animated:NO completion:^(void){}];

是一种加载视图控制器的方法,当加载视图控制器时调用该视图控制器,如viewDidLoadviewDidAppear:或任何类似的方法,问题是因为您的Web视图控制器已经无法呈现,因为self中的presentViewController指的是加载视图控制器。我的建议是将它放在你的加载视图控制器的viewDidAppear:中并在一秒钟之后发送,以确保你的加载视图控制器实际上能够呈现它

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"WebView"];

    [self presentViewController:viewController animated:NO completion:^(void){}];
});