2012-07-27 1 views
1

Я в лесу с этим: у меня есть универсальное навигационное приложение, которое отображает данные, хранящиеся в настоящее время в файле plist. В будущей версии я хочу перенести базу данных в файл JSON на моем сервере, который приложение может загрузить в его пакет, а затем проанализировать его. Может ли кто-нибудь предложить простой легкий способ проверить, что текущий сохраненный файл в комплекте соответствует версии, размещенной на сервере? По существу, проверка обновлений для db без повторной загрузки всего файла JSON.Проверьте обновления файла JSON онлайн и сравните его с локальным сохраненным файлом

Вот фрагмент того, как выглядит начало файла JSON.

{ "version" : "0.2", "description" : "1. Corrections to several entries.\n2. Added 21 new departments from Alameda & Fresno Counties.", "counties" : {............... *Rest of the JSON file here* .....}

Моя идея состояла в том, чтобы сохранить «версию» («0.2») значение NSUserDefaults и использовать это значение для проверки против имеющегося файла JSON в Интернете каждый раз, когда запуски приложения.

Я нахожусь на правильном пути или есть лучший способ сделать это в целом?

Спасибо

Romeo

ответ

3

Вы можете добавить заголовок If-Modified-Since к экземпляру NSMutableURLRequest. Если документ на сервере изменился с этой даты, вы получите данные обратно. Если он не изменился, вы получите 304 Not Modified и никаких данных.

Это намного лучше, чем запрос HEAD, потому что в случае обновления файла вы делаете только один запрос вместо двух.

+0

Простите мою нобость, я просматриваю ссылку на NSMutableURLRequest, я использую ** - addValue: forHTTPHeaderField: ** или ** - setValue: forHTTPHeaderField: **? – Romeo

+0

Нравится? [myRequest setValue: @ "Пт, 20 июл 2012 04:17:16 GMT" forHTTPHeaderField: @ "If-Modified-Since"]; – Romeo

+0

+1 это имеет гораздо больше смысла, чем мой :) – Robotnik

1

ли запрос HEAD (вместо GET) и проверьте заголовок LastModified. если файл был изменен с момента последнего обновления, загрузите файл. Сохраните измененное время где-нибудь, чтобы сравнить его в следующий раз.

Вы можете установить метод HTTP на объект запроса следующим образом:

[request setHTTPMethod:@"HEAD"]; 
+0

спасибо! Это хорошо работает! – Romeo

Смежные вопросы