CoreData のトランザクションについて調べてみる。
NSManagedObjectContext では Undo Management としていくつかメソッドが用意されている。
NSManagedObjectContext Class Reference - Undo Management
これらの挙動を試す簡単なサンプルプログラムを組んでみよう。
今回はまずレコードの表示、追加、削除、変更ができるプログラムを組む。
まず Xcodeで新規プロジェクトを作る。このとき "Use Core Data for storage" にチェックを入れておく。
ビューを用意する。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
今日はここまで。