NSURLConnectionを使用したダウンロードが行われているときに、進行状況バーを表示したいと思います。サーバーからデータを取得しているので、受信したすべてのパッケージのUIを更新できます。しかし、問題は次のとおりです。すでに持っているデータの量と、ダウンロードする必要のあるデータの量をどのように把握するのですか?おそらくバイト単位で...そして、パーセンテージを取得するためにいくつかの計算を行う必要がありますか?
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
オブジェクトによって所有されており、ダウンロードの進行状況や状態の変化を関係者に通知します。