Приложение для iOS — архитектура/пример для синхронизации CoreData с веб-службой

Я ищу либо образец приложения, либо более архитектурное обсуждение для создания приложения, которое поддерживает локальное постоянное хранилище (CoreData) и синхронизирует его с веб-службой, такой как Flickr. В моем случае это Salesforce, но шаблон должен быть похож на многие приложения для Flickr, Twitter, IMAP и так далее.

Примеры вопросов: где лучше всего запускать синхронизацию? какие проверенные структуры данных поддерживают локальные изменения — поддерживают «измененный» BOOL в локальном хранилище для каждого несинхронизированного изменения; Я бы предпочел флаг уровня поля флагу уровня записи)?

Конечно, я должен оптимизировать это самостоятельно, зная количество записей (100) и изменений (10 в день) и вероятность конфликтов (низкая в моем случае на полевом уровне).


person tschloss    schedule 18.04.2012    source источник


Ответы (1)


Вот как бы я подошел к этому:

  1. Начните с моделирования локальной базы данных CoreData/Sqlite, отражающей вашу онлайн-базу данных.
  2. Добавьте свойство NSDate lastModified в каждую строку каждой таблицы. Это позволит мне отслеживать изменения на уровне записи, а не на уровне поля. Это помогает упростить синхронизацию, и в большинстве реальных сценариев достаточно синхронизации на уровне записи.
  3. Выполните автоматическую синхронизацию при запуске приложения, а также предоставьте заметную кнопку «Синхронизировать» на панели навигации. Таким образом, у пользователя всегда будет обновленный набор данных, когда приложение запускается после длительного периода, и он может синхронизировать последние изменения в течение дня. Я бы не стал выполнять фоновую синхронизацию во время использования приложения. Это сделает ваше приложение более сложным и подверженным ошибкам, когда вы пытаетесь решить другие задачи. Поэтому отложите работу над фоновой/автоматической синхронизацией, пока не заработаете все остальное.
  4. Как только моя синхронизация будет работать достаточно хорошо при запуске и по запросу, я попытаюсь поддержать фоновую синхронизацию. Я также попытался бы исключить кнопку «Синхронизировать», чтобы пользователю никогда не приходилось думать о синхронизации (для пользователя она всегда актуальна). Но это будет более долгосрочное усовершенствование, которое я попытаюсь сделать только после того, как у меня будет синхронизация «по требованию», работающая как скала.

Надеюсь, это поможет вам начать работу. Я хотел бы услышать, если вы думаете по-другому об этом.

person melsam    schedule 21.05.2012
comment
Большое спасибо @melsam!! Извините, мой проект временно приостановлен, но вскоре я возобновлю работу с вашими рекомендациями. - person tschloss; 22.06.2012
comment
Не могли бы вы предоставить нам упрощенный пример проекта, чтобы увидеть, как выглядит рабочий код? Спасибо @melsam! - person surlac; 25.12.2012
comment
Нашел хороший учебник от RW raywenderlich.com/15916/ - person anoop4real; 20.08.2014