iOS:当连接断开-1005错误时,未调用UIWebViewDelegate didFailLoadWithError

时间:2016-01-07 21:00:44

标签: ios objective-c networking uiwebview delegates

我在UIWebView中加载大型网页时遇到问题,因为某些原因导致连接因尝试加载java脚本文件而丢失。负载在没有调用didFailLoadWithError或webViewDidFinishLoad的点停止。委托设置正确,因为没有网络错误,页面加载正常,并调用webViewDidFinishLoad方法。

在试图弄清楚为什么页面加载停止我实现并注册了一个自定义的NSURLProtocol,我发现连接委托didFailWithError大部分时间都会被调用,但之后永远不会调用Web视图委托。

我更改了自定义协议以在主线程中运行连接,这导致每次网络连接断开时都会调用didFailWithError方法

- (void)startLoading {
  NSMutableURLRequest *newRequest = [self.request mutableCopy];
  [NSURLProtocol setProperty:@YES forKey:ProtocolKey inRequest:newRequest];


  self.connection  = [[NSURLConnection alloc]
                                initWithRequest:newRequest
                                delegate:self startImmediately:NO];

  [self.connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
                      forMode:NSDefaultRunLoopMode];
  [self.connection start];   
}

Web视图委托webViewDidFinishLoad方法仍然没有被调用,所以我向didFailWithError方法添加了一个通知,它允许我在我的Web视图控制器中处理错误

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
  NSDictionary *dict = @{ @"errorDescription":error.localizedDescription };


  [[NSNotificationCenter defaultCenter] postNotificationName:ErrorKey object:nil ];

  [self.client URLProtocol:self didFailWithError:error];
}

我无法弄清楚为什么在调用委托方法并处理错误之前,后台线程上的Web视图运行的请求似乎被破坏了?

我遇到了与WKWebView类似的问题,我假设使用相同的资源javascript,但我无法在自定义协议处理程序中捕获错误,所以我不知道那里发生了什么。

之前有没有人碰到这个?或者有更好的方法来解决这个问题?

0 个答案:

没有答案