0

私はドキュメントディレクトリ内のビデオファイルをダウンロードするために1つの方法を使用しています、そしてそれは完全にうまくいきました、私はバックグラウンドでビデオをダウンロードしている以下のコードを使用しています、しかしダウンロード中に私はダウンロードされた量と同様にプログレスバーを更新する必要があります、しかしメインスレッドは更新されていません。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    NSData *data = [NSData dataWithContentsOfURL: videoURL];

    NSString *pathToDocs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filename = [NSString stringWithFormat:@"%@.mp4",self.titleString];
    [data writeToFile:[pathToDocs stringByAppendingPathComponent:filename] atomically:YES];
    NSLog(@"File %@ successfully saved", filename);

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Succesfully Downloaded" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];

});
4

3 に答える 3

2

このようにメインスレッドで進行状況を更新してみてください。

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSData *data = [NSData dataWithContentsOfURL: videoURL];

        NSString *pathToDocs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString *filename = [NSString stringWithFormat:@"%@.mp4",self.titleString];
        [data writeToFile:[pathToDocs stringByAppendingPathComponent:filename] atomically:YES];
        NSLog(@"File %@ successfully saved", filename);

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Succesfully Downloaded" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];

        dispatch_async(dispatch_get_main_queue(), ^(){
            //Task you want perform on mainQueue
            //Control Progressbar here

        });
    });
于 2013-03-04T06:21:35.880 に答える
1

dataWithContentsOfURLステータスを返しません。完全なダウンロードが完了するまで、スレッドをブロックするだけです。進行状況を報告する非同期のものを使用する必要があります。

AFNetworking ( https://github.com/AFNetworking/AFNetworking#file-upload-with-progress-callback ) を見てください。探していることを実行するように設計されています。

于 2013-03-04T06:14:14.573 に答える
0

ダウンロードの進行状況を監視できるようにするには、 の使用を検討する必要があります。メソッドをNSURLConnection使用して、進行状況に関する UI を更新できます。NSURLConnectionDataDelegatedidReceiveData

期待されるデータ量を知りたい場合は、多くdidReceiveResponseの場合、HTTP URL の場合、期待されるファイル サイズが含まれている可能性がある を使用できます。(ただし、すべての Web サーバーがそれを提供しているわけではありません。)

Richard が示唆したように、AFNetworking の使用を検討することをお勧めします。AFNetworkingを使用すると、プログラミング作業が簡素化されます。

于 2013-03-04T06:14:40.820 に答える