Iphone 如何在iOS主线程上从UIProgressBar更新
我正在使用一种方法下载文档目录中的视频文件,它工作得非常好,我正在使用下面的代码在后台下载视频,但是在下载时,我需要更新进度条以及下载量,但是主线程没有更新Iphone 如何在iOS主线程上从UIProgressBar更新,iphone,ios,sdk,download,Iphone,Ios,Sdk,Download,我正在使用一种方法下载文档目录中的视频文件,它工作得非常好,我正在使用下面的代码在后台下载视频,但是在下载时,我需要更新进度条以及下载量,但是主线程没有更新 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData *data = [NSData dataWithContentsOfURL: videoURL]; NSString *pathToDocs =
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];
});
dataWithContentsOfURL
不会返回状态;它只是阻塞线程,直到完成下载。您需要使用异步的方法来报告进度
看一看AFNetworking(),因为它是为满足您的需要而设计的。
dataWithContentsOfURL
不会返回状态;它只是阻塞线程,直到完成下载。您需要使用异步的方法来报告进度
查看AFNetworking(),因为它被设计来做你正在寻找的。
< P>为了监视下载的进度,你应该考虑使用,在这里你可以使用<代码> NSURLCalnDeDATAdActudia<代码>方法来更新关于进度的UI。 如果您想知道需要多少数据,可以经常使用,对于HTTP URL,它可能包含预期的文件大小。(但并非所有web服务器都提供此功能。)正如Richard所建议的,您可能需要考虑使用,因为它可以简化您的编程工作 > P>为了监视下载的进度,你应该考虑使用,在这里你可以使用<代码> nSurLnCaldDATAdAdvase<代码>方法来更新关于进度的UI。 如果您想知道需要多少数据,可以经常使用,对于HTTP URL,它可能包含预期的文件大小。(但并非所有web服务器都提供此功能。)
正如Richard所建议的,您可能需要考虑使用,因为它可以简化您的编程工作 尝试像这样更新主线程上的进度
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
});
});
尝试像这样更新主线程上的进度
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
});
});