ページ

2010年6月8日火曜日

CoreData - トランザクション(1) 準備

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

CoreData のトランザクションについて調べてみる。

NSManagedObjectContext では Undo Management としていくつかメソッドが用意されている。
NSManagedObjectContext Class Reference - Undo Management

これらの挙動を試す簡単なサンプルプログラムを組んでみよう。
今回はまずレコードの表示、追加、削除、変更ができるプログラムを組む。


まず Xcodeで新規プロジェクトを作る。このとき "Use Core Data for storage" にチェックを入れておく。

続いてモデルを定義する。今回は Book というシンプルなエンティティを一つ用意した。

ビューを用意する。NSTableView を作り author と titile 列を作る。
モデルとビューの紐付けに NSArrayController を使う。

Modeを Entity とし、Entity Name に Book を指定する。これでモデルとつながった。
NSTableView内の NSTableColumnのバインディング設定を開、Array Controller を指定する。
これで MVCがつながった。
モデル(Book) ← コントローラ(ArrayController)←ビュー(NSTableView/NSTableColumn)

ただし CoreDataを扱うにはもう一手間必要で ArrayController に NSManagedObjectContext を渡す必要がある。今回 NSManagedObjectContextはコード内で生成している為、Interface Builderでは接続できない。この為、コード上で紐付けておく。
CoreDataTransaction_AppDelegate.m
- (void)awakeFromNib
{
[arrayController setManagedObjectContext:self.managedObjectContext];
}

arrayController はあらかじめ IBOutlet で定義し、InterfaceBuidlerで紐付けておく。
CoreDataTransaction_AppDelegate.h

@interface CoreDataTransaction_AppDelegate : NSObject 
{
       :
    IBOutlet NSArrayController* arrayController;
}


モデル(Book) ← コントローラ(ArrayController)←ビュー(NSTableView/NSTableColumn)
               ↓
                     CoreData(NSManagedObjectContext)


これでベースができた。後はデータ追加と削除のコードを付けておこう。
[+][ー]ボタンを作る。


NSArrayController には add: と remove: が用意されているので、それぞれ接続する。
これだけで新規追加と削除が行えるようになる。

さて動かしてみよう。追加、変更、削除が行える。



File メニューから Save を選択するとディスク(XML)に保存ができる。これは新規作成時のテンプレートが saveAction: を実装していて、メニューのSaveと紐づいている為。



ソース:
CoreDataTransaction at 2010-06-08 from xcatsan's SampleCode - GitHub


今日はここまで。