【问题标题】:Present ViewController Error当前 ViewController 错误
【发布时间】:2014-10-03 13:56:26
【问题描述】:

在我的故事板中,我有两个 UIViewController。初始视图控制器是一个显示简单图像的加载/启动屏幕。第二个视图控制器是 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!

我是不是做错了什么?

感谢您的任何帮助/建议。

【问题讨论】:

标签: objective-c xcode cocoa-touch


【解决方案1】:

如果你的代码块:

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

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

在你加载视图控制器的方法中,当视图控制器被加载时调用,例如viewDidLoadviewDidAppear:,或任何类似的方法,问题是因为你的网络视图控制器没有任何东西可以呈现, presentViewController 中的 self 指的是加载视图控制器。我的建议是将它放在加载视图控制器的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){}];
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多