Realmのインストールでハマった話
さて、今回はRealmのインストールでハマった話です。
Realmとは
Realmとは、今話題となっているローカルデータストレージらしいです。
なんでも、CoreDataやSQLiteとかに変わってこれからのスタンダードになって行く可能性があるとかないとか。
インストール
インストールはSwift Docs - Realm is a mobile database: a replacement for SQLite & Core Dataを見ながら、CocoaPodsを使って行いました。
ものの数分でインストールは完了。
コーディング
早速、上記の公式サイトを見ながら実装。
今回は記録開始ボタンをタップしてから、再度ボタンをタップして記録終了するまでの距離と、
平均速度、その時の移動ルート(GMSPolylineを使用)を保存するためのクラスを別のswiftファイルを作って以下のプロパティを持たせる。
- 移動距離:Double
- 平均速度:Double
- 移動ルート:GMSPolyline
- 作成日時:NSDate
あとはボタンがタップされた時のActionに、保存するデータのオブジェクトを作成し、
それぞれの値を格納してからRealmオブジェクトを作成してwrite,addすれば完了…のはずでした。
うまく動かない
ここまで実装して、いざ動かしてみました。
…動かない。
前回も弄ばれたアイツです。
SIGABRT
さて困った。
落ちてるところはRealmオブジェクトを作成するとこだったので、
きっとインストールが失敗してるんだろうと思い、何度もpod installを繰り返したけど変わらず。
何が悪いのか分からなかったので、とりあえずプロジェクトを新たに作り直して、
全部のソースをaddしてCocoaPodsをインストールしてpod install し直してみた。
Realm()通った!
けど、結局何が悪かったのか分からず、BuildSettings周りを比較してみたら、Other Linker FlagsにRealmSwiftが入ってない。
原因はこれっぽい。
Other Linker FlagsってCocoaPods が自動で追加してくれると思ってたけど、ダメなパターンがあるのかな。
前回の"-ObjC"も、もしかして本来は手動で追加する必要なかった?
とりあえずは動いたので、これからエラーになったらOther Linker Flagsも疑ってみるようにしよう。
ちなみにRealmに格納できるデータ型は決まってるらしく、結局GMSPolylineを格納しようとしてコケたので、
そこはどうにかして別のデータ型で格納しなきゃ。
LongitudeとLatitudeを格納できるRealmのクラスを作って、それをメインのクラスにListで格納すればいけるかも。
次は保存したRealmデータを表示して、履歴を出せるようにしたいなぁ。