【问题标题】:Handling a NSURLRequest with timeout when using delegate使用委托时处理超时的 NSURLRequest
【发布时间】:2010-11-18 04:03:40
【问题描述】:

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

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

在取回数据、处理发生的任何错误等方面都可以完美运行。但是,由于 NSURLRequest 的超时设置为 10 秒,我似乎没有在这些方法中被调用(我预计 didFailWithError 会被调用)。它只是永远坐在那里,我没有通知它超时。

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

【问题讨论】:

  • 我同意 Corey 我应该在 didDailWithError 方法中获取它,但它永远不会被调用。该方法中的断点和日志都显示它永远不会因超时而被调用。
  • 对于更多上下文,如果它有所作为,我正在使用stackoverflow.com/questions/332276/… 的答案中谈到的方法来跟踪我有未完成的连接。
  • 我看起来这可能是 3.0 的 beta SDK 中的一个错误,因为一旦最终版本发布,它就会按预期工作。

标签: iphone timeout nsurlconnection nsurlrequest


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你会收到这种类型的iofo:

    确实失败了

    错误:错误域=NSURLErrorDomain 代码=-1001 UserInfo=0xed4870 “超时”

    【讨论】:

    • 注意NSURLErrorTimedOut = -1001
    【解决方案3】:

    你的超时是通过这个方法接收到的:

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

    【讨论】:

    • 如何测试超时?这似乎是一个通用的错误处理程序。
    【解决方案4】:

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

    【讨论】:

    【解决方案5】:

    我做的是这样的:

    - (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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多