我试图避免在UIWebView
的委托返回错误时产生的问题。我在委托实现中有共同的解决方法(我在互联网上的任何地方都看到过)
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
if ([error code] == NSURLErrorCancelled) return;
}
我遇到的问题是这并不总是有效。有时加载网页,另一次加载网页的一部分(标题,文本的一部分......),并且几次不加载任何内容。
还有其他解决办法吗?是否存在可正常运行的浏览器的任何开源实现?
答案 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时,此错误是由于超时造成的。 可能真的不是你的代码,而是你的连接。