Есть ли простой способ обновить прогрессбар при выполнении кода
Возможный дубликат:
Прогресс NSProgressIndicator для циклов For?
У меня простой вопрос на этот раз (надеюсь). У меня есть NSProgressIndicatorView (индикатор выполнения), и я хочу обновить его значение и метку состояния во время выполнения цикла for:
for(int i=0; i<[nameArr count]; i++)
{
NSString* str = [nameArr objectAtIndex:i];
[text setStringValue:str];
[status setStringValue:[NSString stringWithFormat:@"Processing names...%d of %ld",(i+1),[nameArr count]]];
[progress setDoubleValue:i];
}
Этот код работает, но метка состояния и индикатор выполнения не обновляются, пока не завершится весь цикл for. Я могу смотреть, как все работает, если я отправлю их как NSLog
, поэтому я предполагаю, что должен быть легкий путь (без создания NSOperation
) так же обновлять мою метку состояния и индикатор выполнения по мере продвижения.
Есть идеи?
1 ответ
Решение
После некоторого копания пользовательский интерфейс может обновляться асинхронно с помощью циклов for с помощью следующего кода:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
for(int i=0; i<max; i++)
{
//Run for loop stuff here
dispatch_async(dispatch_get_main_queue(), ^(void) {
//Run UI updates in here
});
}
});