Пример кода парсера SeismicXML в документации Apple делает нечто подобное.Он получает «живую» (то есть изменяющуюся) информацию о землетрясениях с сервера и обновляет источник данных через NSNotification при поступлении новой информации.UITableView перезагружает свои данные на основе наблюдения значения ключа, когда NSMutableArray изменяется.Перезагрузка выполняется с помощью [tableView reloadData].
Существует также взаимодействие пользователя с таблицей: пользователь может выбрать tableViewCell и перейти по ссылке для получения дополнительной информации.
Если вы 'Вы беспокоитесь об управлении координацией: вы хотите избежать того, что пользователь нажимает на таблицу, dataArray изменяется, и метод -tableView:didSelectRowAtIndexPath:
пытается получить доступ к данным одновременно.Есть два варианта: либо запретить выбор в таблице при обновлении данных, либо запретить обновление данных во время выбора строки.
Вы можете предотвратить взаимодействие с таблицей, установив tableView.allowsSelection=NO
.Вы можете узнать, когда данные будут обновлены, используя опцию наблюдения значения ключа: NSKeyValueObservingOptionPrior
.Этот подход обычно теряет очки, потому что вы можете прерывать то, что хотел сделать пользователь.
Другой вариант - отложить обновление данных, установив пару логических значений: isSelecting и dataNeedsReloading.Поток будет выглядеть примерно так: пользователь нажимает на таблицу, isSelecting=YES
Если поступают новые данные,
if (isSelecting) {
[tempArray addObject:newData];
dataNeedsReloading=YES;
}
Затем, когда процесс выбора завершается, сбрасывают isSelecting=NO
, проверяют флаг dataNeedsReloading
, объединяютмассивы и перезагрузите таблицу, если это необходимо.Когда закончите, сбросьте dataNeedsReloading=NO
.Также сбросьте tempArray с помощью -removeAllObjects
.