在我的故事板中,我有两个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!
我做错了吗?
感谢您提供任何帮助/建议。
答案 0 :(得分:0)
如果你的代码块:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"WebView"];
[self presentViewController:viewController animated:NO completion:^(void){}];
是一种加载视图控制器的方法,当加载视图控制器时调用该视图控制器,如viewDidLoad
,viewDidAppear:
或任何类似的方法,问题是因为您的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){}];
});