ぽじてぃぶしんきんぐ

2年目エンジニアのブログ。備忘録と趣味の垂れ流し。

Swift: CoreDataのモデルで、数値を扱うときにハマったことと、Realmとの比較(簡単に)。

結局、前回のRealmの記事の最後に書いていた、実機で動かそうとすると「-lc++のライブラリが見つからないよ」って言われて動かない問題が解決できなくって、CoreData使うことにしました。逃げてしまいましたね。まだ発展途上でバグが多くて、初心者の自分にはきつかったです。

CoreData導入の参考にしたサイトは下記です。qiita.com


さて、CoreDataを取り扱うときにModelを以下のように決めました。

 class Item: NSManagedObject {
    @NSManaged var title:String
    @NSManaged var created:Double
}

このcreatedがDoubleをしたせいで、createdをキーとして検索したいときがあったのですが、うまく動かなくて困り果ててました。ただ、どっかの記事に数値を扱うときはNSNumberを使えと書いてあったような記憶がかすかにあったので、以下のように変更してみました。

 class Item: NSManagedObject {
    @NSManaged var title:String
    @NSManaged var created:NSNumber //ここ変更しました
}

これで検索かけるとうまく動いて助かりました。数値(IntとかDoubleとか)は、Model側では「NSNumber」にしておかないとうまく動作しないようです。ただ、「XX.xcdatamodeld」のほうは、IntやDoubleにしておいて大丈夫ですね。NSNumberないですし。

CoreDataとRealmを軽く触ってみての感想ですが、
Realmの簡単にデータベースを扱える感じがやばいですね。
コード量が全く違います。データベースから全レコードを取ってくるのは、Realmなら一行で終わっちゃいます。

let items = Item.allObjects()

この手軽さは最高なので、開発者の方々に頑張って早く安定版を出してほしいですね。