Индикатор активности отображается в табличном представлении при получении данных строки - PullRequest
1 голос
/ 16 апреля 2010

Я перехожу от tableview1.row к tableview2, у которого МНОЖЕСТВО извлекаемых строк. Учитывая, что время загрузки составляет около 3 секунд, я хочу, чтобы навигация скользила в tableview2, как только будет выбран tableview1.row, а затем отображать UIActivityIndicatorView над tableview2, пока данные извлекаются и затем отображаются в виде базовой таблицы. Обратите внимание, что tableview2 на самом деле является подпредставлением родительского UIView (в отличие от родительского UITableView).

Я видел этот пост: Индикатор активности должен отображаться при переходе от UITableView1 к UITableView2

... который дает инструкции для добавления индикаторов активности start и stopAnimating для вызовов вокруг выборки данных в viewDidLoad tableview2.

Дело в том, что я не уверен, как вышеприведенное решение могло бы работать, когда viewDidLoad запускается и завершается до того, как tableview2 заметно проскользнет в представление.

Отдельно я также попытался добавить индикатор активности поверх tableview2 в IB и добавил код анимации запуска / остановки индикатора IBOutlet в viewDidAppear. В результате происходит выборка данных, и я вижу, что индикатор вращается, но в конце выборки табличное представление пусто. Похоже, viewDidAppear слишком поздно для добавления данных в табличное представление, поскольку cellForRowAtIndexPath и т. Д. Уже запущены.

Может кто-нибудь предложить какие-либо указатели? Я вполне мог бы пропустить что-то очевидное здесь (около 5 утра, где я нахожусь и думаю, что мой мозг кашлянет). Должен ли я повторно вызвать cellForRowAtIndexPath и т. Д. Из viewDidAppear? Является ли проблема, что мое табличное представление является подпредставлением, а не родительским представлением?

Спасибо

1 Ответ

1 голос
/ 03 мая 2010

Я еще раз взглянул на свой вопрос, и ответ на самом деле довольно прямой. Любая очень интенсивная обработка, как правило, не должна выполняться в главном потоке. Я пытался выполнить интенсивное отображение данных и отображение интерфейса пользователя индикатора активности в том же потоке, поэтому они обрабатывались последовательно, один за другим.

Решение состоит в том, чтобы войти в мой новый контроллер представления и а) отключить анимацию индикатора активности в главном потоке, а затем б) запустить интенсивную выборку данных в другом потоке (используя executeSelectorInBackground). Любые обновления, связанные с пользовательским интерфейсом, не могут быть применены из фонового потока. Они должны быть возвращены в основной поток.

Множество ТАК сообщений на эту тему уже (пример здесь ), моя проблема в том, что я не отвечаю на них с самого начала:)

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