「CoreData?何だか難しそう。。。」
「CoreData?簡単なアクセスも冗長だよねぇ」
「というかCoreData面倒じゃね?」
はい、私もそう思ってました。
じゃあ外部Libraryに頼ろう!と思い色々調べた結果、「MagicalRecord」が簡単そうだと。
導入〜保存までの一連の流れを備忘録を兼ねて書いておきます。
1.gitからdownload
ここからローカルに保存
2.プロジェクトの取り込み
1で保存したMagicalRecordからMagicalRecordディレクトリをProjectにコピー
3.プロジェクト構成変更
・〜Prefix.pchに以下の内容を追加
〜Prefix.pch
// #define MR_SHORTHANDがないと以下のcreateEntityが使えない
#define MR_SHORTHAND
#import "CoreData+MagicalRecord.h"
4.CoredataのModelを生成
ここはGoogle先生に聞けばいいので省略
5.CoreDataの初期化〜保存
AppDelegate.m
// 初期化処理を追加
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 文字列指定だとProjectFileのカレントに作成されます.
[MagicalRecord setupCoreDataStackWithStoreNamed:@"sample.sqlite"];
// NSURLを渡すと指定された場所に作成されます。
// 以下の例ではLibrary/Cache以下に作成されます。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString* path = [paths objectAtIndex:0];
path = [path stringByAppendingPathComponent:@"sample.sqlite"];
NSURL* url = [NSURL fileURLWithPath:path];
[MagicalRecord setupCoreDataStackWithStoreNamed:url];
}
// CleanUp処理を追加
-(void)applicationWillTerminate:(UIApplication *)application {
[MagicalRecord cleanUp];
}
6.データを生成 and 保存
ViewController.m
// ViewControllerの適当なボタン押下Event
// PersonModelが定義されている前提
// Personはname及びageの属性を保持
-(IBAction) addEntity:(id)sender {
NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];
Person* person = [Person createEntity];
// 値を設定.
person.name = @"hoge";
person.age = 15;
// 値を保存
[context MR_saveNestedContexts];
}
以上の流れで保存までできます。
CoreDataをガチで書くより簡単なのでおすすめかもしれません。
(もしかして何か間違ってるかもしれないので、その時はご指摘ください。。。)