Переносимость файла SQLite Core Data между OS X и iPhone OS - PullRequest
2 голосов
/ 12 февраля 2010

У меня есть существующее приложение, использующее Core Data на iPhone. Время от времени будут обновляться данные приложения, доставляемые в виде обновлений в App Store. В моем идеальном мире создание приложения для редактирования данных в обновлениях с помощью приложения OS X и копирование базы данных sqlite в комплект приложений iPhone было бы относительно безболезненным способом сделать это.

Можно ли перемещать базу данных sqlite (при условии, что они используют одну и ту же модель данных) между OS X и iPhone OS?

Какие вещи, которые я должен остерегаться, не переносимы (например, 32-битные или 64-битные данные)?

Есть ли лучшие альтернативы, которые я пропускаю?

Ответы [ 3 ]

6 голосов
/ 12 февраля 2010

Формат SQLite идентичен для приложений Mac и iPhone с одинаковой моделью данных. Довольно просто создать приложение Mac для редактирования вашей базы данных (я делаю это для своего приложения для iPhone). Фактически, вы можете взять свою модель данных и быстро перетащить интерфейс для нее (из Руководства по программированию основных данных ):

В Mac OS X v10.5 и новее в Интерфейсный конструктор вы можете перетащить ядро Элемент Data Entity из библиотеки на окно или коробка. Интерфейсный Разработчик затем представляет панель, которая позволяет выбрать сущность, которую вы хотите из открытые в настоящее время проекты Xcode.

Обратите внимание, что вы также можете создавать и настроить экземпляр NSController в Интерфейсный Разработчик. Как и в случае создавая пользовательский интерфейс, вы Щелкните правой кнопкой мыши объект в данных Инструмент моделирования в XCode (или выберите Элемент основного объекта данных из Библиотека), но вы перетащите его в Окно файла Интерфейсного Разработчика. За редактирование одного объекта, Экземпляр NSObjectController создано; для редактирования многих объектов, Экземпляр NSArrayController создан.

Я бы также посмотрел Core Data Editor , который загружается в вашу скомпилированную модель управляемого объекта и позволяет вам редактировать вашу базу данных из этого.

2 голосов
/ 11 января 2011

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

если между двумя таблицами есть отношение n: m, то iPhone-код основных данных создает таблицу ссылок, которая выглядит следующим образом:

CREATE TABLE Z_13FOO (Z_13BAR2 INTEGER, Z_15FOO INTEGER, ПЕРВИЧНЫЙ КЛЮЧ (Z_13BAR2, Z_15FOO));

В то время как аромат MacOS создает это:

CREATE TABLE Z_13FOO (Z_13BAR2, Z_15FOO); CREATE INDEX Z_13FOO_Z_13BAR2_INDEX ON Z_13FOO (Z_13BAR2); CREATE INDEX Z_13FOO_Z_15FOO_INDEX ON Z_13FOO (Z_15FOO);

Хотя, похоже, что два индекса в таблице соединения позволят быстро объединить таблицы foo и bar, я измерил снижение производительности более чем в 100 раз по сравнению с версией с ограниченным первичным ключом, которую создали основные данные iPhone.

Возможно, эта проблема не относится к вашему случаю, но вы должны знать об этом при анализе проблем с производительностью, поскольку это не столь очевидная ошибка !!!

Если у кого-то есть решение для этой проблемы, которое позволило бы мне использовать MacOS Core Data для создания базы данных, как я изначально планировал - пожалуйста, опубликуйте ответ здесь !!!

0 голосов
/ 12 февраля 2010

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

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