使用委托时,使用超时处理NSURLRequest

时间:2009-08-10 00:25:07

标签: iphone timeout nsurlconnection nsurlrequest

我正在使用NSMutableURLRequest连接到网站以获取JSON响应。我这样做是通过生成请求,然后使用NSURLConnection与self的委托来处理异步连接。我已经实现了所有正常的委托方法:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

所有这些都可以完美地恢复数据,处理发生的任何错误等。但是,如果将NSURLRequest上的超时设置为10秒,我似乎不会在这些方法中调用(我希望调用didFailWithError) )。它只是永远坐在那里,我没有通知它超时。

阅读iPhone API文档我没有看到在超时发生时应该发生什么,只是你可以设置超时值。应该怎么办?我没有在API中看到任何其他有用的委托方法。我没有手动检查超时,是吗?超时仅适用于同步请求吗?

5 个答案:

答案 0 :(得分:12)

此方法收到您的超时:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

答案 1 :(得分:4)

你将收到这种类型的iofo:

in确实失败了

  

错误:错误Domain = NSURLErrorDomain Code = -1001 UserInfo = 0xed4870   “超时”

答案 2 :(得分:3)

超时行为有点古怪,请参阅Apple开发者论坛上的this thread

答案 3 :(得分:1)

在每个方法中放入一些日志语句并检查它们给出的内容。每当它超时,你肯定会在控制台上收到关于超时的通知。我收到了通知。检查您的代码,如果您仍有问题,请告诉我们。

答案 4 :(得分:1)

我做的是:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    if (error.code == -1001){
        [self showTimeoutAlert];//My method to show dialog with timeout message.
    } else {
        [self showInvalidURLAlert];//My method to show dialog with bad URL message.
    }
}

如上所述-1001是为了超时,在其他测试中我得到-1003(对于错误的URL或没有连接可用)。

我的目标是处理超时,以便我将其视为错误的URL。