Есть ли простой способ обновить прогрессбар при выполнении кода

Возможный дубликат:
Прогресс 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 
        });
    }
});
Другие вопросы по тегам