Core Dataで書かれたコードをMagicalRecordで置き換えた

Posted on
iOS MagicalRecord

昔作ったアプリを今修正しているのですが、Core Data周りのコードが書くのが辛かったので、MagicalRecordに移行しました。

MagicalRecordとは

Core Dataのラッパーです。裏側はCore Dataなので、Core Dataの高パフォーマンスの恩恵を受ける事ができます。

Core DataとMagicalRecordの比較

// core data
NSManagedObject *adam = [NSEntityDescription insertNewObjectForEntityForName:@"Employee"
                                                      inManagedObjectContext:context];

// MagicalRecord
Employee *adam = [Employee MR_createEntity];

オブジェクト指向に慣れている方や、RailsのActive Recordに馴染み深い方は、MagicalRecordの方がすっきり見えるのではないでしょうか。私はEntity名をStringで渡すのが辛くて、NSManagedObjectのサブクラスにMagicalRecordの様なクラスメソッドを自前で実装していたのですが、今思うと最初からMagicalRecordを使っていればよかった…

移行方法

1. App Delegateに生成されるCore Data関連のコードを削除

プロジェクトを作るときに、‘Use Core Data’をチェックすると、App DelegateにCore Data関連のコードが生成されます。このCore Data関連のコードをごっそり削除します。

2. データベースのファイル名を渡す

MagicalRecordにはいくつかsetupに関するメソッドがあるのですが、その内の一つに、データベースのファイル名を渡します。

[MagicalRecord setupCoreDataStackWithStoreNamed:@"DATABASE_NAME.sqlite"];

これで移行は完了です。

終わりに

Core Dataはかなり学習コストが高いと個人的には思うのですが、MagicalRecordなら気軽に始められるのではないでしょうか。今回は既にCore Dataを導入しているアプリだったので、Magical Recordを使いましたが、Mobile時代の新しいデータベースであるRealmも気になっているので、新しいアプリを作るときに試してみたいなと思っています。