Основные данные и JSON вопрос - PullRequest
2 голосов
/ 30 июня 2010

Я знаю, что этот вопрос был задан ранее, но объяснение было немного неясным для меня, мой вопрос немного более общий.Я пытаюсь представить, как можно периодически обновлять данные в приложении для iPhone, используя удаленный веб-сервис.Теоретически часть данных на телефоне будет синхронизироваться периодически (только при обновлении).В то время как другие данные потребовали бы, чтобы пользователь был онлайн, и был запрошен на лету.

Концептуально это представляется возможным при использовании данных XML-RPC или JSON и Core.Интересно, если у кого-то есть мнение о том, как лучше всего это реализовать, я начинающий разработчик iPhone, но я концептуально понимаю большую часть этого процесса.

Спасибо

Ответы [ 3 ]

2 голосов
/ 02 июля 2010

Для синхронизации набора сущностей, когда у вас нет контроля над сервером, есть один подход:

  1. Добавьте атрибут touched BOOL в описание вашей сущности.

  2. При попытке синхронизации пометьте все экземпляры сущности как нетронутые (touched = [NSNumber numberWithBool:NO]).

  3. Выполните цикл по экземплярам на стороне сервера (JSON)и добавьте или обновите сущности из вашего основного хранилища данных в хранилище на стороне сервера или наоборот.Направление обновления будет зависеть от вашей политики синхронизации и того, какие данные «свежее» с обеих сторон.В любом случае пометьте добавленные, обновленные или синхронизированные сущности базовых данных как затронутые (touched = [NSNumber numberWithBool:YES])

  4. В зависимости от политики синхронизации удалите все экземпляры сущностей из хранилища базовых данных, которыевсе еще нетронутым.Не тронутые сущности были предположительно удалены из хранилища на стороне сервера, поскольку между хранилищем базовых данных и сервером для этих объектов не было события добавления, обновления или синхронизации.

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

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

У меня есть ответ, но это отстой. В настоящее время я ищу более приемлемое / надежное решение (то есть все, что готовит Маркус Зарра).

То, что я сделал, нуждается в некоторой работе ... серьезно, потому что это не работает постоянно ...

На мобильном устройстве имеется каталог сущностей json, их версии и URL-адрес, указывающий на файл json с содержимым сущности.

Сервер имеет ту же настройку, каталог, в котором перечислены объекты и т. Д.

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

Когда пользователь выбирает обновление, мобильное устройство теперь имеет URL-адрес для каждого из новых / измененных объектов и загружает его. После загрузки приложение уничтожит все объекты для каждого из измененных объектов, а затем вставит новые объекты из JSON. В случае ошибки удаления / вставки откатывается до состояния предварительного обновления.

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

0 голосов
/ 30 июня 2010

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

Если вы можете это сделать,Код довольно прост.Если вы синхронизируете в обоих направлениях, то все становится сложнее, потому что вам нужно отслеживать дельты с обеих сторон и обрабатывать коллизии.

Можете ли вы уточнить, какой тип синхронизации вы хотите выполнить?Это двунаправленный или только тяга?

...