加载多个 webView 时出现错误 -999

Error -999 when loading multiple webViews

我制作的 iOS 应用可以有多个 webView 同时加载相同的 url。导致此错误:

Error Domain=NSURLErrorDomain Code=-999 "The operation couldn’t be completed. 
(NSURLErrorDomain error -999.)" UserInfo=0x176b7bc0 {NSErrorFailingURLKey=https://example.com, 
NSErrorFailingURLStringKey=https://example.com}

我了解到,在旧请求完成之前启动新请求时会发生这种情况。我如何防止这种情况发生?谢谢

使用委托方法。确定哪个视图触发了该方法,然后如果您要按顺序 运行 它们,则触发下一个。

- (void) webViewDidFinishLoad:(UIWebView *)webview{
     if ( webview == self.wView1 )
     {
          // stuff
     } else if ( webview == self.wView2 ) {
          // stuff 2
     }
}

UITableViewDelegate Protocol Reference

我花了数周时间担心这个错误。我在访问网页时随机得到它。就我而言,我将其归结为页面被请求的速度太快,因为 Web 访问是由代码中的状态机而不是用户驱动的。

经过多方查找,最后发现了一些讨论无法解释为什么会出现错误,但感觉是UIWebView的特性,而不是你应该担心的。指导是忽略它。我看看能不能找到这篇文章,如果能找到,稍后更新这个答案。

我按如下方式更新了我的代码,到目前为止,自从添加它以来没有发现任何不良影响。这表明它几乎是一个通知,任何导致它似乎在 UIWebView 中得到纠正的东西。希望你的情况也是如此。

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    VSSLog(@"Entry: error = %@",error);

    // Added this based on net advice. Its a bogus error.
    if ([error code] == NSURLErrorCancelled) {
        return;
    }

    ... Normal error handling code for proper errors.
}

我不是一个眼不见心不烦的人,但我认为这是可以接受的情况之一。

最后,如果您只使用 iOS8,您可以尝试使用新的 WKWebView 而不是 UIWebView。