在新 viewController 中加载 UIWebView 时出现 HTTP 错误 -999

Posted

技术标签:

【中文标题】在新 viewController 中加载 UIWebView 时出现 HTTP 错误 -999【英文标题】:HTTP Error -999 when loading UIWebView in new viewController 【发布时间】:2018-07-30 13:29:36 【问题描述】:

以下目标 C 代码在单击时失败,并显示错误消息“HTTP 任务失败(错误代码:-999)。它在当前 viewController 中加载 UIWebView 时工作,因此它与链接无关。这个在手机和模拟器上都坏了。

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer

    NSString *urlString = [_array_url objectAtIndex:recognizer.view.tag];
    NSURL *url = [NSURL URLWithString:urlString];
    NSLog([_array_url objectAtIndex:recognizer.view.tag]);
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    UIWebView *webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];
    UIViewController *avc = [self.storyboard instantiateViewControllerWithIdentifier:@"ArticleView"];
    [avc.view addSubview:webview];
    [webview loadRequest:urlRequest];
    [self.navigationController pushViewController:avc animated:YES];

【问题讨论】:

您是否尝试停止正在进行的请求? 【参考方案1】:

UIWebView 加载到当前 viewController 时起作用

所以如果这个不起作用,那么不要这样做:

UIViewController *avc = [self.storyboard instantiateViewControllerWithIdentifier:@"ArticleView"];
[avc.view addSubview:webview];
[webview loadRequest:urlRequest];
[self.navigationController pushViewController:avc animated:YES];

你在这里违反了所有规则:

您不能在创建另一个视图控制器的 view 后立即说出它。视图尚未加载,您正在强制它过早加载。

您不得直接更改另一个视图控制器的界面。

在视图控制器甚至是视图控制器层次结构的一部分之前,您不得强制启动 url 请求加载。

你在这里所做的一切都是错误的。这不是你与视图控制器对话的方式!

相反,只需给 ArticleViewController 一个request属性

ArticleViewController *avc = (ArticleViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"ArticleView"];
avc.request = urlRequest;
[self.navigationController pushViewController:avc animated:YES];

是您在创建视图控制器时可以做的事情:您可以设置一个属性。就这样!现在 ArticleViewController 可以将网络视图添加到它自己的视图,并在它自己的viewDidLoad 中加载请求。

【讨论】:

啊,我明白了。谢谢。

以上是关于在新 viewController 中加载 UIWebView 时出现 HTTP 错误 -999的主要内容,如果未能解决你的问题,请参考以下文章

在新的 AppDomain 中加载插件

无法在新的 appDomain 中加载程序集

在新的 appdomain 中加载 C 模块失败

Swift 2 - 无法在单独的 ViewController 中加载 UIWebView

在新的应用程序域中加载程序集

ApplicationManager.CreateObject 无法在新的 AppDomain 中加载程序集