6

我试图避免在UIWebView的委托返回这样的错误时产生的问题。我的委托实现中有通用的解决方法(我在 Internet 的任何地方都看到过)

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

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

我遇到的问题是这并不总是有效。有时会加载网页,有时会加载网页的某些部分(标题、文本的一部分……),有时不会加载任何内容。

有没有其他解决方案?是否存在正常工作的浏览器的任何开源实现?

4

2 回答 2

12

来自苹果文档:

NSURLErrorCancelled (-999)

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

因此,最有可能发生这种情况的情况是,在第一个请求完成之前,您先加载一个请求,然后再加载另一个请求(或同一个请求)。这可能发生。例如,如果您在类似的方法中调用loadRequest(或loadHTMLStringviewDidAppear:,则可以多次调用。据报道,如果您快速点击UIWebView.

因此,一般建议是查看您调用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]);
}

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

于 2012-12-17T21:27:28.673 回答
2

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

于 2012-12-23T14:29:59.450 回答