Как иметь несколько приложений - одно ядро ​​данных? - PullRequest
0 голосов
/ 22 июля 2010

Я опытный разработчик, но новичок в Mac. Я просто не хочу идти по одному пути, только чтобы узнать, что позже допустил фундаментальную ошибку или неверное предположение.

Я хочу в конечном итоге создать и продать приложение для iPhone с использованием Core Data. Приложение будет бесплатным с контентом, доступным через покупку в приложении. Вот что я хочу сделать:

ВАРИАНТ 1

  1. Создайте служебное приложение Mac OS X, которое указывает на ту же объектную модель Core Data, но имеет собственную «основную» базу данных.
  2. Заполните основную базу данных с помощью приложения Mac.
  3. Экспорт подмножества основных данных из приложения Mac в плоский файл (XML?), Который является подмножеством основных данных.
  4. Когда пользователь приобретает эти данные, загружает их из облака и импортирует эти данные в локальное хранилище данных iPhone.

Номер 2 должен быть достаточно легким. Я читал об XML-парсере, который должен помочь мне с # 4. Мне нужна помощь с № 1 и 3.

Для # 1 я не могу понять, как я могу поддерживать одну объектную модель для обоих приложений с XCode. Эта модель данных должна принимать управление версиями модели. Должен ли я просто создать два проекта, один Mac и один iPhone, и указать им обоим один и тот же файл .xcdatamodel, и магия случится со мной?

Для # 3, есть ли пример кода, которым кто-то может поделиться, который будет перебирать массив объектов для создания XML?

ВАРИАНТ 2

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

Я мог бы поддерживать отдельную базу данных «метаданных», которая содержит информацию об отдельных файлах sql, доступных для приложения.

Затем я могу динамически получать доступ к отдельным файлам SQL из локального каталога документов. Это похоже на модель iBooks, где файлы sql равны отдельным книгам.

Я думаю, что я мог бы иметь только два активных подключения к базе данных одновременно ... одно для метаданных, а другое для конкретной "книги". Однако я не уверен, что это масштабируется до многих (десятков или сотен) файлов sql.

Любая помощь приветствуется!

Jon

ОБНОВЛЕНИЕ : Я только что увидел ответ от Маркуса Зарры в:

Удаление и добавление постоянных хранилищ в основное приложение данных

Похоже, вариант 2 - плохая идея.

Ответы [ 3 ]

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

Для (1) вы можете использовать одну и ту же объектную модель в обоих приложениях.Действительно, если вы используете то же хранилище, сгенерированное Core Data, вы обязаны это сделать.Просто включите один и тот же файл модели в оба приложения.В Xcode самый простой способ сделать это - поместить файл модели вне папок проекта каждого проекта, а затем добавить файл модели, не копируя его в папку проекта.Это гарантирует, что оба приложения используют один и тот же файл модели для каждой сборки.

Для (3) необходимо сначала создать постоянное хранилище «экспорта», используя ту же модель, что и хранилище ссылок, и добавить его в контекст ссылок.В модели создайте конфигурацию «Экспорт».Создайте подраздел для каждого объекта в модели, но не изменяйте никаких атрибутов или связей.Назначьте эти объекты конфигурации экспорта.

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

Помните, что клонирование графа объектов является рекурсивным и может использовать много памяти,

При сохранении, поскольку вы присвоили их конфигурации «Экспорт», все клонированные объекты экспорта и их отношения будут сохранены в хранилище экспорта.Вы будете клонировать не только объекты, но и граф связанных объектов.

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

Для (4) я бы не стал возиться с использованием XML или экспортом данных вне основных данных вообще.Я просто использовал бы экспорт Core Data SQL store, созданного в (3), и покончил с этим.

0 голосов
/ 22 июля 2010

Как вы планируете на самом деле передавать данные с Mac на iPhone?Это то, что вы делаете во время разработки, или что люди делают во время ежедневного использования?Если последнее, вам, вероятно, лучше сразу же создать в своем приложении разрозненный экспорт / импорт.Таким образом, Mac будет сериализовывать данные в XML или JSON, помещать их где-нибудь в облаке (не уверен, проще ли или полезна ли локальная передача / передача данных, облако более универсально), и iPhone извлекает данные и десериализует их в локальную схемурепозиторий.Вы не должны планировать работу на уровне SQL с Core Data.Разные платформы могут использовать разные хранилища данных.

0 голосов
/ 22 июля 2010

Вы можете указать экземпляр NSManagedObjectContext и экземпляр NSPersistentStoreCoordinator. Этот класс имеет опции, позволяющие вам указать расположение файла для сортировки данных и формат (SQLite, Binary или XML)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...