iOS: проверка наличия удаленных обновлений файлов - PullRequest
4 голосов
/ 15 апреля 2011

У меня есть несколько UITableView, которые собирают свое содержимое из удаленных XML-файлов. Иногда файл обновляется, но представление не обновляется, потому что я загружаю файл в свой метод viewDidLoad.

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

Каков наилучший способ сделать это? Можно ли как-то проверить дату обновления удаленного файла в сети? Или я должен сохранить обновленную дату в моем приложении, а затем проверить с интервалом? Должен быть предпочтительный способ сделать это, чтобы я знал, что файл XML был обновлен.

Спасибо.

Ответы [ 5 ]

0 голосов
/ 12 марта 2013

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

0 голосов
/ 16 апреля 2011

Другие ответы уже достаточно хорошо рассмотрели вопрос «когда я должен перезагрузить» файл.

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

См. iPhone Pull Down Обновите как Tweetie для некоторых библиотек, которые делают его реализацию довольно простой.

0 голосов
/ 15 апреля 2011

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

опция для этого:

  • Храните ваш объект данных в классе делегата приложения и ссылайтесь на него в контроллере, содержащем ваш UITableView.Когда ваш контроллер представления вызывает viewDidAppear, просто наберите reloadData вашего UITableView.
0 голосов
/ 15 апреля 2011

Вместо того, чтобы запрашивать у сервера номер версии или дату обновления, почему бы не сообщить серверу номер версии или дату обновления вашей удаленной (клиентской) версии.

Затем ваш сервер решает, установлена ​​ли у вас уже последняя версия (A) или вам нужна новая (B):

0 голосов
/ 15 апреля 2011

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

В приложении для iOS сохраните значение последней сохраненной версиии сравните это с этой маленькой страницей, которую вы тянете.Если значение на странице больше (новее), извлеките полный XML-файл.

Это значение может быть либо датой, когда оно было обновлено, либо номером версии.В данный момент я не на Mac, поэтому тестирование кода Obj-C не является тривиальным, но вот некоторый псевдокод:

int versionNumber; // can be a datetime as well
...
void pullXmlIfAvailable() {
    int latestVersionNumber = parseVersionNumberFromPage(URLget("myurl.com/check.xml")).to_i();

    if (latestVersionNumber > versionNumber)
        DataClass xml = parseDataFromLargerFile(URLget("myurl.com/bigfile.xml"));
}
...