我从照片库中选择多个图像和视频,并将资源路径存储到数据库和原始资产中,并将其存储到应用程序文档目录中。对于此过程,在完成之前我会显示状态为进度条。 但问题是当我开始保存进程进度条状态保持不变时,它将在保存操作完成后增加进程状态。 我正在使用SVProgressHUD显示进度条。 代码我在选择资产后做了。
static float progress = 0.0f;
progress = 0.0f;
[SVProgressHUD showProgress:0 status:@"Loading"];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(SaveAssetToSQL) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(load_Album_Data) userInfo:nil repeats:NO];
我在逐个保存数据时调用IncreaseProgress方法。 保存资产的方法。
-(void)SaveAssetToSQL{
for (int i=0; i<TotalAssets; i++) {
[self performSelector:@selector(increaseProgress) withObject:nil afterDelay:0.3f];
//further process for save
}
}
IncreaseProcess的方法
- (void)increaseProgress {
progress+=0.1f;
[SVProgressHUD showProgress:progress status:[NSString stringWithFormat:@"%f",progress]];
if(progress < 1.0f)
[self performSelector:@selector(increaseProgress) withObject:nil afterDelay:0.9f];
else
[self performSelector:@selector(dismiss) withObject:nil afterDelay:0.4f];
}
我必须显示进度条及其状态,直到资产存储过程完成。此外,我试图使用GCD将该存储过程放在后台线程中,但无法显示进度状态。 请帮我解决这个问题。 请建议我处理这个过程的方法。 与我的问题相关,有任何方法可以在后台处理存储过程并在前台显示进度条状态。 帮我解决这个问题。
答案 0 :(得分:0)
我建议您使用dispatch_queue_t myQueue = dispatch_queue_create("MyQueue",NULL);
dispatch_async(myQueue, ^{
__block percentCompleted = 0;
NSArray *files = [self getFiles];//assume you get the file locations from this method.
for(NSString *filepath in files){//loop the files
//Perform copying file to new location
//Calculate how much percent has been completed
percentCompleted = <newValue>;
dispatch_async(dispatch_get_main_queue(), ^{
// Update progress-bar UI
});
}
});
进行长时间运行的以下方法。
它应该看起来类似于下面的代码。我只是为你托管骨架代码。
--tail