2010-06-30 6 views
2

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

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

Thanks

ответ

2

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

  1. Добавить атрибут в touched BOOL вашего описания объекта.

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

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

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

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

0

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

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

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

+0

Отметить людей без комментариев о том, почему? –

0

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

Что я сделал какую-то работу нужно ... серьезно, потому что она не работает все время ...

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

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

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

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

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

+0

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

+0

Я не знаю, является ли это работоспособным решением, но я только что нашел RestKit в Github ... похоже, что он будет обрабатывать синхронизацию между локальным хранилищем данных ядра и облаком. https://github.com/twotoasters/RestKit –

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