20657


現在実装中のアプリでRealmを使用しています。  
アプリ初回起動時にRealmにデータをサーバから取得してセットするのですが、データ量が多すぎるため、あらかじめデータをセットした状態でリリースする方法はどうすればよいでしょうか？


CC BY-SA 3.0
2016-01-06T04:24:04.867
20646
2016-01-06T07:08:59.523
2016-01-06T06:51:53.113
5519
13901
question
ios swift realm
iOSでRealmに初期データをセットしたい


あらかじめ、シミュレータなどを使ってアプリを動作させてデータを作成しておき、そのデータをアプリに組み込んでリリースします。

使用するときは、読み込み専用なら、アプリに組み込んだファイルを直接読み込めばいいです。  
もし更新が発生するなら、初回起動時に組み込んだファイルを書き込み可能な場所（ドキュメントディレクトリなど）にコピーして使用します。

アプリケーションバンドル内のデータを直接読み込むには下記のようにします。  
例のファイル名は「Places.realm」です。

[code]

    let mainBundle = NSBundle.mainBundle()
    let seedFilePath = mainBundle.pathForResource("Places", ofType: "realm")
    
    let config = Realm.Configuration(readOnly: true, path: seedFilePath)
    
    Realm.Configuration.defaultConfiguration = config
    
    let realm = try! Realm()
    
[/code]

更新が必要な場合は、このファイルをドキュメントディレクトリなどにコピーしてから利用します。

[code]

    let mainBundle = NSBundle.mainBundle()
    let seedFilePath = mainBundle.pathForResource("Places", ofType: "realm")
    
    let documentDir: NSString = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
    let realmPath = documentDir.stringByAppendingPathComponent("Places.realm")
    
    try! NSFileManager().copyItemAtPath(seedFilePath!, toPath: realmPath)
    
    let config = Realm.Configuration(readOnly: true, path: realmPath)
    
    let realm = try! Realm()
    
[/code]

（tvOSですが）下記のサンプルコードが役に立つかと思います。組み込み済みのデータをアプリで表示するサンプルです。

<https://github.com/realm/realm-
cocoa/tree/master/examples/tvos/swift/PreloadedData>

もし、分からないことがある場合は、Realmにはチャットのサポート <http://slack.realm.io/> やFacebookのユーザーグループ
<https://www.facebook.com/groups/realmjp/>
がありますのでそちらで聞かれるのも良いと思います。より適切にアドバイスできると思います。


CC BY-SA 3.0
2016-01-06T07:08:59.523
20657
2016-01-06T07:08:59.523
5519
20646
answer