Posted at
RealmDay 13

CSVデータをRealmに登録して最初からアプリに入れておく方法

More than 3 years have passed since last update.


はじめに

「Objective-CでRealmを使ってハマったこと」で書こうと思ってましたが、

Swift2.0の勉強がてらこっちのテーマにしました。ハマったことは別記事で書く予定。


環境


  • OS X 10.11.1

  • Xcode 7.2

  • Swift 2.0

  • Realm 0.96.3


用途とか

変更しないマスターデータ、設定をRealmに登録しておき

あらかじめアプリに入れておきたい時などに。


CSVデータ準備

読み込むCSVデータ


TestData.csv

1,データ1

2,データ2
3,データ3


CSV読み込み、Realmにデータ登録


TestData.swift

import UIKit

import RealmSwift

class TestData: Object {
dynamic var id = 0
dynamic var name = ""
}


if let csvPath = NSBundle.mainBundle().pathForResource("TestData", ofType: "csv") {

var csvString=""
do{
csvString = try NSString(contentsOfFile: csvPath, encoding: NSUTF8StringEncoding) as String
} catch let error as NSError {
print(error.localizedDescription)
}
csvString.enumerateLines { (line, stop) -> () in

// 保存先のパスを出力しておく
print(Realm.Configuration.defaultConfiguration.path!)

let testData = TestData()
testData.id = Int(line.componentsSeparatedByString(",")[0])!
testData.name = line.componentsSeparatedByString(",")[1]

let realm = try! Realm()
try! realm.write {
realm.add(testData)
}
}
}

保存先のパスにdefault.realmファイルが生成されるので

名前を変更して(TestData.realm)プロジェクトにインポートします。


Realmからデータ取得

// .realmファイルを指定する

let config = Realm.Configuration(
path: NSBundle.mainBundle().pathForResource("TestData", ofType:"realm"),
readOnly: true)

let realm = try! Realm(configuration: config)
let results = realm.objects(TestData).filter("id > 2")


最後に

.realmファイルをインポートするために、シミュレーターで実行してMac上にファイルを生成する必要があります。

もっといい方法あるかもですが、こんな感じで。


参考

http://ja.stackoverflow.com/questions/19307/swift2-0%E3%81%A7%E3%81%AEcsv%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF