在新 viewController 中加载 UIWebView 时出现 HTTP 错误 -999
HTTP Error -999 when loading UIWebView in new viewController
以下 objective C 代码在点击时失败并显示错误消息“HTTP 任务失败(错误代码:-999)。它在当前 viewController 中加载 UIWebView 时有效,因此它不起作用”与链接无关。这在 phone 和模拟器上都会中断。
- (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];
}
It works when UIWebView is loaded in the current viewController
所以如果这个不有效,那么不要这样做:
UIViewController *avc = [self.storyboard instantiateViewControllerWithIdentifier:@"ArticleView"];
[avc.view addSubview:webview];
[webview loadRequest:urlRequest];
[self.navigationController pushViewController:avc animated:YES];
您违反了这里的所有规则:
您不能在创建另一个视图控制器后立即谈论它的 视图。该视图尚未加载,您正在强制它过早加载。
您不能直接更改另一个视图控制器的界面。
您不得强制 url 请求加载在视图控制器成为视图控制器层次结构的一部分之前开始。
你在这里所做的一切都是错误的。这不是你与视图控制器交谈的方式!
相反,只需给 ArticleViewController 一个 request
属性:
ArticleViewController *avc = (ArticleViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"ArticleView"];
avc.request = urlRequest;
[self.navigationController pushViewController:avc animated:YES];
那是你在创建视图控制器时被允许做的:你可以设置一个属性。就这样!现在 ArticleViewController 可以将 Web 视图添加到 它自己的视图 并在它自己的 viewDidLoad
.
中加载请求
以下 objective C 代码在点击时失败并显示错误消息“HTTP 任务失败(错误代码:-999)。它在当前 viewController 中加载 UIWebView 时有效,因此它不起作用”与链接无关。这在 phone 和模拟器上都会中断。
- (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];
}
It works when UIWebView is loaded in the current viewController
所以如果这个不有效,那么不要这样做:
UIViewController *avc = [self.storyboard instantiateViewControllerWithIdentifier:@"ArticleView"];
[avc.view addSubview:webview];
[webview loadRequest:urlRequest];
[self.navigationController pushViewController:avc animated:YES];
您违反了这里的所有规则:
您不能在创建另一个视图控制器后立即谈论它的 视图。该视图尚未加载,您正在强制它过早加载。
您不能直接更改另一个视图控制器的界面。
您不得强制 url 请求加载在视图控制器成为视图控制器层次结构的一部分之前开始。
你在这里所做的一切都是错误的。这不是你与视图控制器交谈的方式!
相反,只需给 ArticleViewController 一个 request
属性:
ArticleViewController *avc = (ArticleViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"ArticleView"];
avc.request = urlRequest;
[self.navigationController pushViewController:avc animated:YES];
那是你在创建视图控制器时被允许做的:你可以设置一个属性。就这样!现在 ArticleViewController 可以将 Web 视图添加到 它自己的视图 并在它自己的 viewDidLoad
.