2009-08-10 61 views
10

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

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

所有与获取数据回完美的作品,处理出现的任何错误,等等。然而随着对的NSURLRequest超时设置为10秒我似乎并没有在这些方法中调用(我期望didFailWithError被调用)。它只是永远坐在那里,我没有通知它超时。

阅读iPhone API文档我没有看到什么应该在超时发生时发生,只是您可以设置超时值。应该发生什么?我没有看到API中的其他委托方法可以提供帮助。我不必手动检查超时,是吗?超时只用于同步请求吗?

+0

我同意Corey应该在didDailWithError方法中获得它,但它永远不会被调用。该方法中的断点和日志显示它永远不会被调用超时。 – Parrots 2009-08-27 15:50:44

+1

对于更多的上下文,如果它有所作为,我使用的方法在http://stackoverflow.com/questions/332276/managing-multiple-asynchronous-nsurlconnection-connections的回答中讨论了连接I有突出的。 – Parrots 2009-08-27 15:56:00

+0

我看起来像这可能是在3.0的测试版SDK中的错误,因为只要最终发布它按预期工作。 – Parrots 2010-01-12 18:16:06

回答

12

你超时是在这个方法获得:

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

如何测试超时?这似乎是一个通用的错误处理程序。 – devios1 2013-09-10 21:44:08

+14

找到它了:'error.code == NSURLErrorTimedOut' – devios1 2013-09-10 21:46:52

1

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

4

U将BR接受这种类型的iofo的:在

没有失败,

error: Error Domain=NSURLErrorDomain Code=-1001 UserInfo=0xed4870 "timed out"

+0

注意'NSURLErrorTimedOut = -1001' – devios1 2013-09-10 21:47:23

3

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

+1

那个线程太棒了!谢谢!请注意,线程提供了对https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html的引用,其中列出了NSURLErrorDomain中的所有错误 – 2013-04-05 15:27:46

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或无连接avaliable)。

我的目标是对待超时,所以我把其他任何东西都视为错误的URL。