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

时间:2018-07-30 13:29:37

标签: ios objective-c uiwebview

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

- (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 个答案:

答案 0 :(得分:0)

  

当将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可以将Web视图添加到其自己的视图中,并以其自己的viewDidLoad加载请求。