【发布时间】:2010-08-05 10:21:41
【问题描述】:
我正在编写一个从网上下载东西的 iPhone 客户端。由于蜂窝网络不是那么快,而且文件可能很大,所以我想改进带有进度条的活动微调器。
到目前为止一切顺利,我正在使用 NSURLConnection 并检查 Content-Length 标头以查看我将下载多少字节。然后,在-connection:didReceiveData: 回调中,我将接收到的数据附加到我的NSMutableData 对象中,在那里我可以跟踪到目前为止下载内容的大小与预期字节数。
在您拥有支持 gzip 压缩的服务器之前,这一切都有效。使用 gzip 压缩的服务器将宣传 x 字节作为内容的大小。但是,由于 NSURLConnection 在后台进行解压,所以传递给didReceiveData 回调的数据已经展开。因此,在文件压缩率的比例上,预期下载的字节数小于实际接收的字节数。
这意味着进度条溢出,因为预期的字节数比预期的要早得多。当我控制服务器时,我可以做的事情是发送 gzip 内容的特殊标头以避免 NSURLConnection 进行的解压缩,但我无法控制网络上的所有服务器。
NSURLConnection 是否有任何隐藏的方法来报告传输的字节而不是扩展的字节?我是否必须编写自己的 NSURLConnection 来跟踪传输的字节并自己解压缩 gzip 数据以获得准确的进度条指示器?也许有一个替代的较低级别的 Core Foundation API?
【问题讨论】:
标签: iphone objective-c gzip nsurlconnection