yaakaito.org

MagicalRecordの始め方忘れたので思い出しながら書く

Objective-C, iOS

こんにちは!うきょーです! MagicalRecord使うかーと思ったけど、やりかた覚えてなかったので書く!やっぱブログ書かないと駄目ですね。

プロジェクト作る

Use Core Data をチェックする

xcdatamodeldをいじる

とりあえずサンプルとして

1
2
3
4
5
6
7
8
9
Book:
  name: string
  bookId: integer 16
  authors: [Author]

Author:
  name: string
  type: string
  book: [Book]

という感じにした、BookAuthorは一対多なので、To-Many Relationshipを設定する。

Classとかも忘れずに設定する。

エンティティのモデルクラス作る

mogeneratorを使うのが一般的っぽいですが、僕は別に使わなくていいかなーと思ってます。 というのも、mogeneratorって「自動生成されるやつだと変更したあとにマージが大変・・・、なのでCoreDataとビジネスロジックをカテゴリで分ける」的な使われ方をするのかなーと思ってるんだけど、それってそりゃそーじゃね、と思うのです。

僕は、CoreDataから出てきたものは、いうならJSON形式のレスポンスをそのままNSDicitionaryとして使ってるのとそんなに違わないよなーと思っていて、なので内部的にNSManagedObjectをもってるビジネスロジックを担当するクラスを作ればいいと思う。

とはいえただの決めの問題だし、どっちにしろmogenerator使えば楽出来ることに変わりはないと思うので、mogenerator使っときます。(ていうかこれじゃないと駄目なんだっけ?大丈夫だよね?)

(入ってない人は)brewでmogeneratorをインストールします。

1
$ brew install mogenerator

mogeneratorが吐き出すクラスを入れるディレクトリなんかを作る。とりあえず CoreData とかにしておく。

準備したらmogeneratorでクラスを吐き出す。

1
$ mogenerator -m [YourCoreData].xcdatamodeld/[YourCoreData].xcdatamodel -O CoreData/ --template-var arc=true

こんな感じ! --template-var arc=true 付けないとARC用のコードが出てこないっぽいので注意。

MagicalRecord入れる

1
pod `'MagicalRecord'
1
$ pod install

いい時代になりましたね。

MagicalRecord使う

インポートします。

1
2
#define MR_SHORTHAND 1
#import "CoreData+MagicalRecord.h"

セットアップします。

1
[MagicalRecord setupCoreDataStackWithStoreNamed:@"YourCoreData.sqlite"];

使います。

1
2
3
4
5
MGBook *book = [MGBook createEntity];
book.name = @"Objective-C";
book.bookId = @(123);

[context saveToPersistentStoreAndWait];

簡単ですね!

いつの間にか MR_save じゃなくて、MR_saveToPersistentStoreAndWaitMR_saveToPersistentStoreWithCompletion: になったんですね。こっちの方がいいと思います!!!!

sqliteのビュアーとか

Liyaがおすすめですかね。