我希望在使用NSURLConnection进行下载时显示进度条。当我从服务器获取数据时,我可以更新每个收到的包的UI。但问题是:我如何计算出已有多少数据,以及需要下载多少数据?可能是字节......然后我必须做一些数学来获得百分比?
答案 0 :(得分:63)
在NSURLConnection
委托中,实施类似内容以查找总内容长度。服务器必须支持这一点,但它很可能适用于静态内容:
- (void)connection: (NSURLConnection*) connection didReceiveResponse: (NSHTTPURLResponse*) response
{
statusCode_ = [response statusCode];
if (statusCode_ == 200) {
download_.size = [response expectedContentLength];
}
}
然后像这样更新进度:
- (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) data
{
[data_ appendData: data];
download_.progress = ((float) [data_ length] / (float) download_.size);
// Broadcast a notification with the progress change, or call a delegate
}
在我的情况下,我有一个具有size
和progress
属性的下载实例。它们由全局DownloadManager
对象拥有,该对象将负责通知感兴趣的各方下载进度或状态更改。