Я хотел бы доставить мое приложение с уже заполненными данными в моей базе данных. Должен ли я просто скопировать его в каталог документов или есть ли другие вещи?
Как доставить приложение с предварительно заполненной базой данных
Ответ 1
В документации по царству есть раздел "Объединение королевства с помощью приложения" :
Его общий для того, чтобы засеять приложение с исходными данными, сделав его доступным для ваших пользователей сразу при первом запуске. Вот как это сделать:
Сначала заполните область. Вы должны использовать ту же модель данных, что и ваше окончательное приложение для доставки, чтобы создать область и заполнить ее данными, которые вы хотите связать с вашим приложением. Поскольку файлы realm являются кросс-платформенными, вы можете использовать приложение OS X (см. наш пример JSONImport) или ваше приложение iOS, работающее в симуляторе.
В коде, в котором вы создаете этот файл, вы должны закончить, сделав компактную копию файла (см. [RLMRealm writeCopyToPath: error:]). Это уменьшит размер файла Realms, что сделает ваше приложение для конечного приложения загруженным для ваших пользователей.
Перетащите новую сжатую копию вашего файла realm в свои окончательные приложения Xcode Project Navigator.
Перейдите на вкладку фаз построения целевых объектов приложения в Xcode и добавьте файл области на фазу сборки "Копировать ресурсы Bundle".
В этот момент ваш связанный файл в реальном времени будет доступен вашему приложению. Вы можете найти его путь, используя [[NSBundle mainBundle] pathForResource: ofType:].
Вы можете создать область только для чтения, вызвав [RLMRealm realmWithPath: readOnly: error:]. Или, если вам нравится создавать файл с возможностью записи в реальном времени на основе этих исходных данных, вы можете скопировать связанный файл в папку "Документы приложений" с помощью [[NSFileManager defaultManager] copyItemAtPath: toPath: error:], а затем построить новую область с помощью [ RLMRealm realmWithPath:].
Вы можете обратиться к нашему образцу приложения миграции для примера того, как использовать пакетный файл области.
Ответ 2
Предварительно заполненная база данных Realm для Android
Поместите свою базу данных realm в папку res/raw
и выполните следующий код в действии:
//Копирование базы данных области
copyBundledRealmFile(this.getResources().openRawResource(R.raw.default0), "default0.realm");
RealmConfiguration config0 = new RealmConfiguration.Builder()
.name("default0.realm")
.build();
realm = Realm.getInstance(config0);
private String copyBundledRealmFile(InputStream inputStream, String outFileName) {
try {
File file = new File(this.getFilesDir(), outFileName);
FileOutputStream outputStream = new FileOutputStream(file);
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buf)) > 0) {
outputStream.write(buf, 0, bytesRead);
}
outputStream.close();
return file.getAbsolutePath();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}