使用委托时超时处理NSURLRequest
我正在使用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中的其他委托方法可以提供帮助。我不必手动检查超时,是吗?超时只用于同步请求吗?
在每个方法中放入一些日志语句并检查它们给出的内容。每当它超时时,你肯定会在控制台上收到关于超时的通知。我收到通知。检查你的代码,如果你仍然有问题,请告诉我们。
U将BR接受这种类型的iofo的:在
没有失败,
error: Error Domain=NSURLErrorDomain Code=-1001 UserInfo=0xed4870 "timed out"
注意'NSURLErrorTimedOut = -1001' – devios1 2013-09-10 21:47:23
超时行为有点古怪,请参阅Apple的开发人员论坛上的this thread。
那个线程太棒了!谢谢!请注意,线程提供了对https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html的引用,其中列出了NSURLErrorDomain中的所有错误 – 2013-04-05 15:27:46
我所做的是这样的:
- (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。
我同意Corey应该在didDailWithError方法中获得它,但它永远不会被调用。该方法中的断点和日志显示它永远不会被调用超时。 – Parrots 2009-08-27 15:50:44
对于更多的上下文,如果它有所作为,我使用的方法在http://stackoverflow.com/questions/332276/managing-multiple-asynchronous-nsurlconnection-connections的回答中讨论了连接I有突出的。 – Parrots 2009-08-27 15:56:00
我看起来像这可能是在3.0的测试版SDK中的错误,因为只要最终发布它按预期工作。 – Parrots 2010-01-12 18:16:06