UIWebView:为什么请求在使用不存在的主机名时不超时?

我的情况是这样的:

  • 我有一个UIWebView ,它向主机名由用户提供的URL发出POST请求。
  • 当主机名不存在时,我需要超时,以便我可以提醒用户说他们应该检查他们的设置。

发生什么事:

我提出这样的要求:

 NSString *theURL = [NSString stringWithFormat:@"https://%@%@", _hostname, LOGIN_PART_URL]; NSString *body = [NSString stringWithFormat:@"Username=%@&Password=%@", _username, _password]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:theURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:_timeoutInSecs]; [request setHTTPMethod: @"POST"]; [request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]]; [web loadRequest:request]; 

当networking上不存在主机名时,我不会收到任何超时响应。

我已经实现了UIWebViewDelegate所有委托方法,并且当我使用一个不存在的主机名时,我得到以下调用:

  1. webView: shouldStartLoadWithRequest: navigationType:
    • (为了testing,总是返回true)
  2. webViewDidStartLoad

就是这样 – 之后没有任何东西。

我很惊讶, webViewDidStartLoad被调用,因为这表明它find了URL,并认为它可以从中获取数据。 但它不能作为URL不存在!

我在这里做错了什么?

我有一个解决方法,我要实现,它使用NSTimer来查看是否在超时时间内收到响应。 不过,我在取消UIWebView的请求方面遇到了问题 – 但这是我的下一个SO问题的主题!

所以我的问题:

  1. 在无效的URL上调用webViewDidStartLoad是否正确?
  2. 我应该看到一个请求超时错误返回的方式,我已经设置我的请求?

提前致谢!!

拉伸:)

使用委托方法

 webView:didFailLoadWithError: 

从中获取错误。 如果错误代码是

 -1000 - Bad Url -1001 - Request timed out -1003 - Cannot find host -1004 - Cannot connect to host -1005 - Network connection lost -1006 - NSLookupFailed 

通过检查这可以提醒用户有关错误。