web-dev-qa-db-ja.com

ファイルをダウンロードするときにNSURLConnectionのプログレスバーを作成するにはどうすればよいですか?

NSURLConnectionを使用したダウンロードが行われているときに、進行状況バーを表示したいと思います。サーバーからデータを取得しているので、受信したすべてのパッケージのUIを更新できます。しかし、問題は次のとおりです。すでに持っているデータの量と、ダウンロードする必要のあるデータの量をどのように把握するのですか?おそらくバイト単位で...そして、パーセンテージを取得するためにいくつかの計算を行う必要がありますか?

24

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オブジェクトによって所有されており、ダウンロードの進行状況や状態の変化を関係者に通知します。

64
Stefan Arentz