【问题标题】:How to wait for a certain status of a NSURLConnection如何等待 NSURLConnection 的某个状态
【发布时间】:2012-09-27 20:24:46
【问题描述】:

很抱歉又打扰了另一个 NSURLConnection 问题,这里已经增加了一千多个。

场景如下。在使用动态加载的增强现实功能的 iPhone 应用程序中,会提示用户下载新的 AR 模型,因为这些模型可用。模型可能有几 MB 大,因此在决定下载之前,应向用户指示要下载的所有模型的总大小。

要了解每个文件有多大,我想使用异步 NSURLConnection,但在收到响应后停止下载([NSURLResponse expectedContentLength])。我可以在委托的连接中执行此操作:didReceiveResponse: 方法。

我的问题是,我怎样才能等到这种情况出现?如何设置 NSURLConnection,让它异步启动,然后等到 connection:didReceiveResponse: 方法被调用?我尝试使用 NSCondition,在设置 NSURLConnection 并在 connection:didReceiveResponse: 方法中发出条件信号后让它等待。但这所做的只是冻结了主线程。有什么想法吗?

【问题讨论】:

    标签: iphone objective-c ios nsurlconnection nscondition


    【解决方案1】:

    也许您可以发送 HEAD 请求而不是 GET。这可能取决于您的服务器设置,但这应该只为您提供标头,包括 Content-Length。您应该能够使用 NSMutableURLRequest 以便您可以更改请求方法,然后像往常一样读取响应中的 expectedContentLength。

    【讨论】:

    • 谢谢布赖恩,我想知道如何发送 HEAD 请求。如果我这样做了,那么我可以使用同步的 NSURLConnection - 具有适当的超时 - 等到它完成,然后读出预期的内容长度。感谢您的提示。
    • 只是说您的建议在恢复工作后测试良好。我设置了一个 NSMutableURLRequest,将方法更改为 HEAD,执行 NSURLConnection sendSynchronousRequest 并从响应中读取 expectedContentLength,所有这些都没有任何线程、GCD 或回调。十分优雅。再次感谢。
    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多