2016-03-25 10 views
0

私は、写真ギャラリーから複数のイメージとビデオを選択し、データベースとオリジナルアセットのパスをアプリケーションドキュメントディレクトリに格納します。このプロセスでは、完了するまでステータスがプログレスバーに表示されます。 問題は、プロセスの進行状況バーのステータスを保存して保存を開始しても、保存操作が完了した後にプロセスのステータスが増加することです。 ショーの進行状況バーに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メソッドを呼び出すと、1つずつ保存されます。 アセットを保存する方法。

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

長時間実行する操作には、GCDを使用して次の方法をとることをお勧めします。

  • ファイル保存部を別のスレッドで実行します。
  • 各ファイルのコピー後に完了した割合を計算します。
  • メインスレッドで進行状況の更新を呼び出します。

以下のコードに似ているはずです。私はちょうどあなたのためのスケルトンコードを主催しています。私はload_Album_Dataを呼び出す必要がどこ

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 

     }); 
    } 
}); 
+0

uが私を提案することができ、私は上記のプロセスの下にそれを書くが、それはあなたが私の解決策を試してみて、それが動作しない場合は私にあなたのコードを表示することができます –

+0

上でプロセスを保存する前に実行します。私は今旅行しており、アクセスが制限されています。 –

+0

はい、完全に私のために働いています。また、私がコメントに書いた私の問題を解決しました。 –

関連する問題