Сайт с односторонней синхронизацией> приложение для iPhone с использованием Core Data - PullRequest
5 голосов
/ 23 августа 2011

Я создаю приложение для iPhone с базой данных (скорее всего, я буду использовать Core Data впервые, но все же может оказаться, что я буду использовать SQLite в зависимости от ваших ответов здесь).

Содержимое этой базы данных должно регулярно обновляться из некоторого онлайн-хранилища (скорее всего, базы данных MySQL).

Поскольку исходная база данных будет довольно большой, она будет в приложении, поэтому пользовательзагружать его не нужно, обновления будут довольно небольшими, чтобы их можно было загрузить.Вы можете видеть, что обновления «Delta» являются обязательными (загрузка всего набора данных каждый раз является просто слишком большим количеством данных).Обновления будут состоять из нескольких новых записей и, в конечном итоге, некоторых исправлений существующих записей

Локальная база данных будет иметь несколько таблиц / сущностей (с большим количеством связей между ними), которые необходимо обновить, эти таблицы / сущностибудет только для чтения (*).Будут еще несколько таблиц / сущностей, в которые пользователь может вводить комментарии (чтение / запись), но они никогда не должны обновляться, это личные данные пользователя.На самом деле я иногда создаю дополнительную таблицу с отношением 1: 1, чтобы хранить красиво разделенные (таблицы / сущности набора данных по сравнению с таблицами / сущностями комментариев).

Может кто-нибудь дать мне способсоздать онлайн-файл со всеми изменениями в БД, который можно загрузить на телефон и эффективно и правильно проанализировать, чтобы эти изменения / новые записи были применены.Я думал о чем-то похожем на миграцию, которую Rails использует для поддержки своей базы данных, но не могу найти ничего, что выглядит чистым и производительным.Следует помнить, что отношения между различными таблицами / сущностями очень важны, поэтому мое вдохновение не удается ...

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

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

В широком архитектурном смысле я бы предложил следующее:

  1. Взгляните на Restkit , который предоставляет отличную библиотеку iOS для доступа к веб-API и очень простойсредство хранения извлеченной информации в локальном экземпляре CoreData
  2. Реализация интерфейса RESTful JSON для отображения данных из базы данных MySQL в представлении JSON.Это должно быть просто с любой современной веб-структурой.Django предоставляет Piston, Rails делает это "из коробки", Drupal имеет платформу Services, а Symfony имеет аналогичную функциональность.
  3. Сохраните ваш статус "Последнее обновление" в переменной NSUserDefaults, а затем добавляйте это время и дату к каждому вашему запросу.на ваш веб-сервис.Это позволит вам отфильтровать ваш набор результатов до дельт

Я не могу рекомендовать RestKit достаточно высоко.Потратьте несколько часов на преодоление кривой обучения, и вы никогда не оглядываетесь назад.

0 голосов
/ 18 июля 2013

В качестве альтернативы я бы предложил AFNetworking + MagicalRecord, потому что вы упоминаете Rails в своем вопросе.(Restkit был для меня слишком сложным)

  1. AFNetworking будет обрабатывать связь с сервером
  2. AFOAuth1Client ** AFOAuth2Client ** будет обрабатывать авторизацию (с Doorkeeper, если вы используете рельсы, например)
  3. MagicalRecord будет обрабатывать импорт и запросы ваших основных данных в стиле ActiveRecord.
...