无法处理数据库和文档目录中的数据存储的后台进程?

时间:2016-03-25 08:17:20

标签: ios objective-c progress-bar

我从照片库中选择多个图像和视频,并将资源路径存储到数据库和原始资产中,并将其存储到应用程序文档目录中。对于此过程,在完成之前我会显示状态为进度条。 但问题是当我开始保存进程进度条状态保持不变时,它将在保存操作完成后增加进程状态。 我正在使用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将该存储过程放在后台线程中,但无法显示进度状态。 请帮我解决这个问题。 请建议我处理这个过程的方法。 与我的问题相关,有任何方法可以在后台处理存储过程并在前台显示进度条状态。 帮我解决这个问题。

1 个答案:

答案 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