Рабочий процесс с reloadRowsAtIndexPaths: withRowAnimation - PullRequest
0 голосов
/ 26 февраля 2011

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

Я не уверен, каким должен быть рабочий процесс в этом случае.Как я могу убедиться в правильности количества строк и индекса пути при вызове reloadRowsAtIndexPaths:withRowAnimation?При предыдущем вызове deleteRowsAtIndexPaths:withRowAnimation. Может все еще происходить анимация. Если все изменения происходят одновременно, я могу использовать beginUpdates и endUpdates, но что мне делать ввышеуказанная ситуация?

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Ханно, я рекомендую использовать объектную модель команды для постановки в очередь изменений в главном потоке.

Вот как:

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

Сочетание обратных вызовов timer и animationDidFinish должно сделать это.

0 голосов
/ 26 февраля 2011

Поскольку вам все равно придется выполнять все обновления таблицы в основном потоке (поскольку UIKit должен вызываться в основном потоке), я не вижу здесь проблемы параллелизма. Всякий раз, когда вы получаете новые данные, вызывайте метод в главном потоке, который обновляет таблицу. Этот метод блокирует основной поток до его завершения. Это должно гарантировать, что табличное представление сохраняет свою целостность.

Или вас беспокоит перекрывающаяся анимация строк?

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