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

标签 iphone progress-bar nsurlconnection

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

最佳答案

在您的 NSURLConnection 委托(delegate)中,实现类似这样的东西来找出总内容长度。服务器必须支持这一点,但它很可能适用于静态内容:

- (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 对象拥有,该对象负责通知感兴趣的各方下载进度或状态更改。

关于iphone - 下载文件时如何为 NSURLConnection 创建进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9645512/

相关文章:

android - 如何根据 Kotlin 中的进度条进度更新 textview 值

objective-c - 为 NSURLConnection 使用代理

iphone - 将应用程序从一个帐户转移到具有相同 SKU 编号的另一个帐户

ios - 解析调用两次的 ObjectsDidLoad

java - 带有 apache 常见电子邮件的进度条

jquery - 如何创建计票进度条

iphone - 什么时候发布[[NSMutableData数据]保留]?

iOS:为什么我需要在 NSURLConnection sendAsynchronousRequest 之后使用 sleep(1)?

iphone - 如何检测 iPhone 上的内存泄漏?

iphone - 只有 iOS 7 崩溃 [NSNull intValue] : unrecognized selector sent to instance