2009年9月2日水曜日

CoreDataを使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
iPhone3.0から CoreData が使えるとのことだったので OneLiner で使ってみることにする。CoreDataは随分昔に MacOSXで使ったことがあるのでそのときの記事を引っ張りだしてきてコードを書いてみた。

Cocoaの日々(旧)
Core Data その1

CoreDataは永続性スタックと呼ばれるいくつかのクラスで構成されていて、利用時にはこれらのインスタンスを用意する必要がある。

(過去記事から引用)


コードはこんな感じ(とりあえず awakeFromNib に書いてみた)。
- (void)awakeFromNib
{
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[NSManagedObjectModel mergedModelFromBundles:nil]];

managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];

NSError* error = nil;
NSString* filepath = [NSString stringWithFormat:@"%@/%@",
[NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0],
@"memo.db"];

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:[NSURL fileURLWithPath:filepath]
options:nil
error:&error];
NSLog(@"1:%@", error);

NSManagedObject* memo =
[NSEntityDescription insertNewObjectForEntityForName:@"Memo"
inManagedObjectContext:managedObjectContext];
[memo setValue:@"hello" forKey:@"title"];
[memo setValue:@"photo1.png" forKey:@"photo"];
[managedObjectContext save:&error];
NSLog(@"2:%@", error);
}


永続性スタックである NSPersistentStoreCoordinator, NSManagedObjectContext を用意し、必要な処理を加えていけば良い。以前の記事でも解説されているが、前者はモデル(いわゆるスキーマ)と(persistent object storeを通じて)DBファイルを扱い、後者はDBに対する検索、追加、変更、削除などのプログラミングのインターフェイスを提供している。今回永続化タイプは SQLite を選んだ。

モデルは Xcodeの「新規ファイル...」から作成できる。


今回は Memo というエンティティを1つ用意した。


さて実行してみよう。所定の場所に memo.db が作成されて(サンプルコードで挿入した)値が格納されているのがわかる。

0 件のコメント:

コメントを投稿