我正在使用一种方法在文档目录中下载视频文件,并且工作得非常好,我正在使用下面的代码在后台下载视频,但是在下载时,我还需要更新进度条,因为下载了多少,但是主线程是没有更新。

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_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

        });
    });

09-30 14:44
查看更多