Я делаю приложение, которое делает очень большой объем вычислений для нескольких файлов, и поэтому для отслеживания всего, что происходит, я добавил NSProgressIndicator (значения 0 -100).NSProgressIndicator не обновляется до конца цикла
У меня также есть консоль в приложении, поэтому метод 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)]];
});
}
});
При этом запускается цикл, сообщения записываются в консоли приложения (не NSLog, фактический GUI консоли я сделал) асинхронно, но индикатор не до тех пор, пока весь цикл цикла не завершится.
Так что, если было 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
Почему не обновление прогресс бар? Он работает по основной теме.
Ваш журнал очень глупый. Ключевое значение в вашем коде: '((i + 1)/_files.count) * 100', но вы не регистрируете его, чтобы узнать, имеет ли смысл. – matt
@matt 'logConsole:' представляет информацию пользователю, а не мне как разработчику. Это должно быть красивым, а не отлаживать. – David
Это ничего не меняет. Ваш вопрос: «Почему не обновляется индикатор выполнения»? Способ узнать - посмотреть на значения, которые вы настраиваете. Вы не смотрите. – matt