web-dev-qa-db-ja.com

レルムデータベースが事前に入力されたアプリを配信する方法

レルムデータベースにすでにデータが入力されているアプリを提供したいと思います。単にそれをドキュメントディレクトリにコピーする必要がありますか、それとも他に何かする必要がありますか?

28
swalkner

レルムのドキュメントには、 "アプリケーションとレルムのバンドル" に関するセクションがあります。

アプリに初期データをシードして、最初の起動時にすぐにユーザーが利用できるようにするのが一般的です。これを行う方法は次のとおりです。

  1. まず、レルムを設定します。レルムを作成し、アプリにバンドルするデータを入力するために、最終的な出荷アプリと同じデータモデルを使用する必要があります。レルムファイルはクロスプラットフォームであるため、OS Xアプリ(JSONImportの例を参照)またはシミュレーターで実行されているiOSアプリを使用できます。

  2. このレルムファイルを生成するコードでは、ファイルの圧縮コピーを作成することで終了する必要があります(-[RLMRealm writeCopyToPath:error:]を参照)。これにより、レルムのファイルサイズが小さくなり、最終的なアプリをユーザーがダウンロードしやすくなります。

  3. レルムファイルの新しい圧縮されたコピーを、最終的なアプリのXcode Project Navigatorにドラッグします。

  4. Xcodeでアプリターゲットのビルドフェーズタブに移動し、レルムファイルを「バンドルリソースのコピー」ビルドフェーズに追加します。

  5. この時点で、バンドルされたレルムファイルにアプリからアクセスできます。 [[NSBundle mainBundle] pathForResource:ofType:]を使用して、そのパスを見つけることができます。

  6. [RLMRealm realmWithPath:readOnly:error:]を呼び出して、読み取り専用レルムを作成することもできます。または、この初期データに基づいて書き込み可能なレルムファイルを作成する場合は、[[NSFileManager defaultManager] copyItemAtPath:toPath:error:]を使用して、バンドルされたファイルをアプリケーションのDocumentsディレクトリにコピーし、次の方法で新しいレルムを作成できます。 [RLMRealm realmWithPath:]を使用します。

バンドルされたレルムファイルの使用例については、 migration sample app を参照してください。

30
jpsim

Android向けの事前入力されたレルムデータベース

レルムデータベースを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;
}
3
Noor Ali Butt