ひとりまとめ

もろもろのメモ

MagicalRecordを使ってみたい!- 準備編 -

CoreDataを使っていろいろやってやるぜー!と意気込んだものの、前提だの準備だの使う時の段取りだのがややこしくて脱落気味・・・。

そんな折、「MagicalRecordなるものがあり、とっても便利らしい」という情報を仕入れ(というか教えてもらい)、すかさず試してみました。

 

これは楽だ!

 

ということで、忘れないうちにやり方をメモ。

 

前提:CocoaPodsを使う

よく聞くGitHubですが、使い方も存在も僕からするとなんかややこしそう!それを、これまた簡単にしてくれるものだそうです。これを使ってラクしてみます。

このCocoaPodsについては、こちらを参考にしました。わかりやすい!

開発レシピ:Objective-Cのライブラリ管理ツール CocoaPods | iOS開発者@日本

 

前提その2:moneneratorを使う

これはMagicalRecordとセットのように登場するもので、Data Modelで設定するモデルに紐づくカスタムクラスを作ってくれる上に、モデルの構造をいじった時も簡単に対応できるらしい。ということで、これも使います。

モノはbrewというのをつかってターミナルからインストールも出来るけど、GUIな僕は迷わずここからpkgをDL&インストール!

mogenerator + Xmo’d

 

 


 

ということで、ようやく準備完了。

実際のプロジェクトでMagicalRecordを使う方法です。

 


 

Xcodeのプロジェクトを作る

ここはいつも通り。普通にSingle View Application(じゃなくてももちろんいいですけど)を選んで作ります。

f:id:g2_girichan:20131211184526p:plain

 

続いて、プロジェクトにCore DataのData Modelを追加。以前はプロジェクトを作る時にCoreDataという項目にチェックを入れて作ってた気がしますが、今はこうやるみたい。

f:id:g2_girichan:20131211185026p:plain

 

作成したData ModelにEntityを追加し、Attributesを設定していきます。ここで重要なのは、右側にあるEntityのClassに関連づけたいカスタムクラスの名前を入れておくこと。CoreDataを自力で実装する場合はEntityを選んだ状態で新しいFileとしてNSManagedObject subclassを作りますが、そういうのをmogeneratorが作ってくれます。

 

f:id:g2_girichan:20131211191355p:plain

ちなみに、このAttributesに新しい項目を追加したり、Typeを変更したり、名前を変えたりといったことは、後からでも可能です。この後行うコマンドを叩くだけで、何度でも楽勝です。

 

Podfileをつくる

これは、CocoaPodsを使ってMagicalRecordをインストールするためのファイルです。

<プロジェクト名>.xcodeprojと同じ階層に、「Podfile」という拡張子なしのテキストファイルを作って、以下の内容を記述します。
platform :ios
pod ‘MagicalRecord'
これを改行コードLFで保存。文字コードUTF-8にしてみました。
 
 

MagicalRecordをインストール

Podfileを保存した場所にターミナルで移動します。(コマンドは cd Testみたいな感じで。じつはcdと打った後に目的のフォルダをターミナルのウインドウにドラッグ&ドロップするとパスが入ります)
ターミナルで以下のコマンドを実行。
 $pod install

 これによりPodsフォルダ、<プロジェクト名>.xcworkspaceファイルなどが作られます。

以降は<プロジェクト名>.xcworkspaceを使って作業します。非常に要注意。最初間違えて、いつものプロジェクトファイルをいじってました。
 
※次のようなエラーが出た場合は、コピペなどで文字コードやらなんやらおかしくなってる可能性あり。一度消して書き直す!

Invalid `Podfile` file: /(ファイルを配置した場所)/Podfile:2: unterminated string meets end of file. Updating CocoaPods might fix the issue.

 

モデルに紐づくカスタムクラスを作成

このステップで、Data Modelで設定した情報を元にカスタムクラスを作ります。
ターミナルで以下のコマンドを実行します。[ ]内は、作っている場所に合わせます。
 $ mogenerator -m [YourCoreData].xcdatamodeld/[YourCoreData].xcdatamodel -O CoreData/ --template-var arc=true 

-m のところは、Data Modelのある場所。-O の所はこれで作るカスタムクラスの書き出し先です。モデルの変更などを行ったら、これをまた実行すればOKぽい。

 
このステップで、1つのEntityにつき次のような4つのクラスが作られます。(SSCatというカスタムクラスを指定した場合)

_SSCat.h

_SSCat.m

SSCat.h

SSCat.m

 
これらを自分で、プロジェクトにドラッグ&ドロップで追加します。
 
 

 
ここまでがプログラムをする前の作業で、ここからプログラムを書いていきます。
 

 

MagicRecordを読み込む

Surpporting Files以下にある<プロジェクト名>-Prefix.pchというファイルに、以下のように書きます。
 #import <availability .h>
 
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
 
#ifdef __OBJC__
    #import <uikit /UIKit.h>
    #import <foundation /Foundation.h>
 
    #define MR_SHORTHAND
    #import "CoreData+MagicalRecord.h"
#endif 

 #define MR_SHORTHANDというのを、この順番で書いておかないとエラーになります。書くことで、実際に使う際「MR_findAll」でなくて「findAll」みたく「MR_」なしで書くことができます。ググっているといろんな記述方法にヒットしますが、違いはこれっぽげ。

 
 

データベースを初期化

AppDelegate.mの一番最初にある
- application:application didFinishLaunchingWithOptions:launchOptions
の中に書きます。
 
ここで、どのデータベースを使うかを指定。デフォルトで良いならこう。

[MagicalRecord setupCoreDataStack];

 自分でDB名を指定したい場合はこう。

[MagicalRecord setupCoreDataStackWithStoreNamed:@"db.sqlite"];
さらに、iCloud対応のDBを指定することもできるようです。
 
 
 

データベースのクリーンアップ

同じくAppDelegate.mの一番最後にある
- applicationWillTerminate:application 
の中に書く。
 

[MagicalRecord cleanUp];

 これは決まり文句っぽげ。 

 

 

これであとは、実際にデータの読み書きをしていけば良いみたいです。

ここからが簡単になるところなのだけど、長くなったので一旦休憩〜。

詳細! Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS7対応

詳細! Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS7対応