如何在下载文件时为NSURLConnection创建进度条?

时间:2010-02-15 18:08:10

标签: iphone progress-bar nsurlconnection

我希望在使用NSURLConnection进行下载时显示进度条。当我从服务器获取数据时,我可以更新每个收到的包的UI。但问题是:我如何计算出已有多少数据,以及需要下载多少数据?可能是字节......然后我必须做一些数学来获得百分比?

1 个答案:

答案 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
}

在我的情况下,我有一个具有sizeprogress属性的下载实例。它们由全局DownloadManager对象拥有,该对象将负责通知感兴趣的各方下载进度或状态更改。