Этот ответ только для людей, которые
- включая предварительно заполненную базу данных в вашем приложении
- создание приложения для нескольких платформ (iOS, Android и т. Д.)
Я создал предварительно заполненную базу данных SQLite для приложения Android. Затем, когда я делал версию приложения для iOS, я подумал, что будет лучше использовать Core Data. Поэтому я потратил довольно много времени на изучение Core Data, а затем переписал код, чтобы заранее заполнить базу данных. Изучение того, как выполнять каждый шаг на обеих платформах, требовало много исследований, проб и ошибок. Было намного меньше совпадений, чем я бы надеялся.
В итоге я просто решил использовать ту же базу данных SQLite из моего проекта Android. Затем я использовал оболочку FMDB для прямого доступа к базе данных в iOS. Преимущества:
- Нужно сделать предварительно заполненную базу данных только один раз.
- Не требует смены парадигмы. Синтаксис между Android и FMDB, хотя и отличается, все еще довольно похож.
- Иметь гораздо больше контроля над выполнением запросов.
- Разрешает полнотекстовый поиск.
Хотя я не сожалею об изучении Core Data, если бы я делал это заново, я мог бы сэкономить много времени, просто придерживаясь SQLite.
Если вы начинаете в iOS, а затем планируете перейти на Android, я бы все равно использовал оболочку SQLite, такую как FMDB, или какое-либо другое программное обеспечение для предварительного заполнения базы данных. Хотя технически вы можете извлечь базу данных SQLite, предварительно заполненную данными ядра, схема (имена таблиц и столбцов и т. Д.) Будет иметь странное имя.
Кстати, если вам не нужно изменять предварительно заполненную базу данных, не копируйте ее в каталог документов после установки приложения. Просто получите к нему доступ прямо из комплекта.
// get url reference to databaseName.sqlite in the bundle
let databaseURL: NSURL = NSBundle.mainBundle().URLForResource("databaseName", withExtension: "sqlite")!
// convert the url to a path so that FMDB can use it
let database = FMDatabase(path: databaseURL.path)
Это позволяет вам не иметь двух копий.
Обновление
Теперь я использую SQLite.swift вместо FMDB, потому что он лучше интегрируется с проектами Swift.