Мой источник данных изменяется из-под UITableView - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть приложение, основанное на панели вкладок и данных, полученных из Интернета. Главная вкладка показывает карту, а одна из других вкладок показывает инциденты вокруг центральной точки карты, отображаемой с помощью UITableView. Если пользователь перемещает карту, а затем переходит на страницу инцидентов, мне нужно обновить список инцидентов, отображаемый в таблице. Для этого я запрашиваю инциденты в viewWillAppear:animated:, и когда это завершается (асинхронно), я вызываю метод reloadData табличного представления.

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

Вот вопрос, который похож:
Сбой UITableView при обновлении источника данных во время прокрутки

Одно из решений этого вопроса описывает решение на высоком уровне, которое именно то, что я хочу: заморозить источник данных во время обновления таблицы. Однако я не могу понять, когда нужно разморозить источник данных. Проблема в том, что я не могу найти способ получить уведомление, когда таблица обновляется.

Есть идеи? Как заморозить источник данных во время обновления таблицы, а затем разморозить его после обновления таблицы?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Хотя мне бы очень хотелось получить уведомление, когда представление таблицы завершит доступ к источнику данных, я обнаружил, что моя проблема была связана с изменением контейнера данных из рабочего потока. Ответ на этот вопрос привел меня к решению:

Обновление данных XML и обновление UITableView

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

0 голосов
/ 19 ноября 2010

Проблема в том, что я не могу найти какой-либо способ получить уведомление, когда таблица обновляется.

Я думаю, вы можете предположить, что данные уже загружены, проверивв tableView:cellForRowAtIndexPath:, чтобы увидеть, была ли загружена последняя строка.

Я не проверял ее, просто сделал предположение на основе API

...