-1

サーバーから複数のファイルを同時にダウンロードする必要があります。現在、一度に 1 つのビデオをダウンロードしていますが、完全に正常に動作しています。以下は同じコードです。ここで、複数のビデオを同時にダウンロードし、進行中のすべてのダウンロードに対して個別の進行状況バーを維持する必要があります。そして、このコードは大きなビデオのダウンロードで機能しますか、それともより良いアプローチがあります.

ありがとう

//グローバルヘッダー変数

float contentSize;
NSMutableData *responseAsyncData;
UIProgressView *progressBar;

//接続を作成するためのコード

NSString *requestString = [NSMutableString stringWithString:VIDEO_LINK];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestString] cachePolicy:NO timeoutInterval:15.0];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];

そして、このようなコールバックを処理します..

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    if ([response isKindOfClass:[NSHTTPURLResponse class]])
    {
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
        contentSize = [httpResponse expectedContentLength];
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    if(responseAsyncData==nil)
    {
        responseAsyncData = [[NSMutableData alloc] initWithLength:0];
    }
    [responseAsyncData appendData:data];
    float progress = (float)[responseAsyncData length] / (float)contentSize;
    [progressBar setProgress:progress];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Error: %@", [error localizedDescription]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSError* error;

    if(responseAsyncData)
    {
       //filepath = Path to my location where i am storing
        BOOL pass = [responseAsyncData writeToFile:filepath atomically:YES];
        if (pass) {
            NSLog(@"Saved to file: %@", filepath);
        } else {
            NSLog(@"Video not saved.");
        }
        [progressBar setProgress:0];
    }
    responseAsyncData = nil;
}
4

1 に答える 1

2

ダウンロード コードを のサブクラスにカプセル化しますNSOperation。次に、 を使用しNSOperationQueueてダウンロードを非同期で実行したり、特定の数を並行して実行できるようにしたりできます。

私はこのチュートリアルを読んでいませんが、非常に詳細に見えます: http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues

于 2013-04-17T14:20:28.987 に答える