Предварительно заполненная версия Core Data? - PullRequest
11 голосов
/ 14 августа 2011

Мое приложение включает в себя получение большого файла JSON через Интернет, а затем его синтаксический анализ в Core Data.

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

Ответы [ 3 ]

10 голосов
/ 14 августа 2011

На сайте Ray Ray Wenderlich * есть разумное руководство по предварительной загрузке .

В общем случае - создайте отдельный проект, проанализируйте файл JSON в базе данных основных данных. Создайте свой реальный проект, скопируйте объектную модель и файл базы данных в этот новый проект.

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

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

Обновление июнь 2012

У меня есть небольшой пример проекта на GitHub под названием PromNight , который демонстрирует использование рабочей области Xcode с проектом iPad и проектом OS X для предварительной загрузки данных для Core Data. При этом используется объектная модель, которая используется двумя приложениями для синхронизации изменений при предварительной загрузке.

5 голосов
/ 14 августа 2011

Core Data использует резервное хранилище, которое по сути является базой данных sqlite (или, в Mac OS, необязательно XML-файл).Вы должны просто добавить этот файл в комплект вашего приложения и отправить его вместе с приложением.Что касается получения данных в базу данных, вот что я бы сделал:

  1. Напишите некоторый код для импорта данных из любого формата, в котором вы его имеете.
  2. Запустите этот код.
  3. Скопируйте файл sqlite с устройства или из симулятора.
  4. Добавьте вновь созданный файл sqlite в свой проект в Xcode.

Я бы не сталсоздайте файл sqlite вручную, так как Core Data за кулисами делает "вуду", а работа с sqlite может привести к поломке.Кроме того, я видел, как разработчики используют несколько целей.для импорта.Таким образом, они могут написать код в условном компиляторе, и тогда им не придется беспокоиться о поддержке проекта.Например:

#ifdef kImportTarget

//run core data import

#else

// run the Core Data stack setup from an existing file

#endif
2 голосов
/ 14 августа 2011

База данных Core Data - это просто файл базы данных SQLite.Вы можете доставить его в свой основной комплект, а затем скопировать в папку с документами, прежде чем связать его с постоянным координатором хранилища.

...