忽略NSURLErrorDomain错误-999在UIWebView中不起作用

时间:2012-12-13 13:00:12

标签: ios uiwebview

我试图避免在UIWebView的委托返回错误时产生的问题。我在委托实现中有共同的解决方法(我在互联网上的任何地方都看到过)

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    if ([error code] == NSURLErrorCancelled) return;
}

我遇到的问题是这并不总是有效。有时加载网页,另一次加载网页的一部分(标题,文本的一部分......),并且几次不加载任何内容。

还有其他解决办法吗?是否存在可正常运行的浏览器的任何开源实现?

2 个答案:

答案 0 :(得分:11)

来自Apple文档:

  

NSURLErrorCancelled(-999)

     

“取消异步加载时返回.Web Kit框架委托在加载资源上执行取消操作时将收到此错误。请注意,如果取消下载,NSURLConnection或NSURLDownload委托将不会收到此错误。 “

因此,最有可能的情况是,在第一个请求完成之前,您需要加载一个请求,然后加载另一个请求(或同一个请求)。这可能发生。例如,如果您在loadRequest这样可以多次调用的方法中调用loadHTMLString(或viewDidAppear:)。如果您快速点击UIWebView中的2个链接,也会发生这种情况。

因此,一般建议是审核您拨打loadRequest(或loadHTMLString)的方式和位置,并可能提供一些代码。

为了解决这个问题,我建议将以下跟踪添加到您的Web视图委托中:

- (void)webViewDidStartLoad:(UIWebView *)webView {
      NSLog(@"Starting to download request: %@", [webView.request.URL absoluteString]);
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
      NSLog(@"Finished downloading request: %@", [webView.request.URL absoluteString]);
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    if ([error code] == NSURLErrorCancelled)
      NSLog(@"Canceled request: %@", [webView.request.URL absoluteString]);
}

如果您检查输出,您应该更清楚地看到发生了什么。如果您粘贴输出,我们可以尝试进一步帮助您。

答案 1 :(得分:2)

大多数情况下,使用NSURLConnection或UIWebView时,此错误是由于超时造成的。 可能真的不是你的代码,而是你的连接。