複数のファイルに対して非常に大量の計算を行うアプリを作成しているため、進行中のすべてを追跡するために、NSProgressIndicator (値 0-100) を追加しました。
アプリにはコンソールもあるので、logConsole:メソッドはそのコンソールに書き込みます。
私のループは次のようになります。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
for(int i = 0; i < _files.count; i++)
{
//Do calculations
dispatch_async(dispatch_get_main_queue(), ^(void){
[_progressBar setDoubleValue: ((i+1) / _files.count) * 100];
[self logConsole:[NSString stringWithFormat:@"Completed file #%d", (i+1)]];
});
}
});
このループが実行されると、メッセージはアプリのコンソール (私が作成した実際の GUI コンソールである NSLog ではありません) に非同期的に記録されますが、進行状況バーは for ループ全体が完了するまで変化しません。
5 つのファイルがある場合、次のようになります。
LOG: Completed file #1
Progress bar at 0
LOG: Completed file #2
Progress bar at 0
LOG: Completed file #3
Progress bar at 0
LOG: Completed file #4
Progress bar at 0
LOG: Completed file #5
Progress bar at 100
プログレス バーが更新されないのはなぜですか? メインスレッドで実行されています。