2

我的情况是这样的:

  • 我有一个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];

当网络上不存在主机名时,我没有收到任何超时响应。

我已经实现了 的所有委托方法UIWebViewDelegate,当我使用不存在的主机名时,我会按顺序调用以下方法:

  1. webView: shouldStartLoadWithRequest: navigationType:
    • (测试时总是返回真)
  2. webViewDidStartLoad

就是这样 - 在那之后什么都没有。

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

我在这里做错了吗?

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

所以我的问题:

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

提前致谢!!

拉紧 :)

4

1 回答 1

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

通过检查这一点,您可以提醒用户该错误。

于 2012-05-17T04:42:17.427 回答