Индикатор активности не отображается, когда есть код цикла? - PullRequest
1 голос
/ 16 ноября 2009

Я показываю индикатор активности на экране приветствия, а также на главном экране. Он работает нормально на экране приветствия. В главном представлении есть код цикла for, который выполняет некоторую задачу 16 раз. В это время устройство выглядит немного зависшим, чтобы не показывать индикатор активности. Когда я добавляю стандартный код активности на главном экране во время выполнения некоторого цикла (16 раз), я не наблюдаю показ установленного индикатора активности. Это происходит только после завершения цикла. Я попытался дать некоторую задержку перед выполнением кода цикла, но все еще не показывает в течение ожидаемого времени. В противном случае пользователь может подумать, что мое приложение зависает на устройстве, поэтому я хочу показать индикатор активности в это время.

Любые предложения по решению этой проблемы приветствуются!

спасибо.

Ответы [ 2 ]

6 голосов
/ 16 ноября 2009

Что происходит, когда ваша программа блокирует основной цикл выполнения, UIKit не вызывает start на индикаторе, пока ваш код не будет завершен. Чтобы обойти это, запустите цикл в фоновом потоке, используя:

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

метод на NSObject, это должно решить вашу проблему.

Вот ссылка на документацию по методу:

NSObject Reference

1 голос
/ 16 ноября 2009

Элементы пользовательского интерфейса обновляются только после завершения текущего цикла выполнения. Если вы добавляете и запускаете индикатор активности в том же потоке, где вы запускаете цикл for с 16 вычислениями, индикатор не будет обновляться до тех пор, пока эти вычисления не будут завершены, поскольку текущий цикл выполнения не может завершиться до этого. точка.

Что вам нужно сделать, это добавить и запустить индикатор активности в главном потоке (как вы, вероятно, делаете сейчас), а затем запустить цикл for в фоновом потоке. Опубликуйте уведомление, когда работа в этом фоновом потоке завершена, и в этот момент (обратно в основной поток) вы можете остановить и удалить индикатор активности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...