(前回)Cocoaの日々: BlogAssistant(8) - Safariプラグインとビューアの分離
モデルへ新たに作成日時を保持する createdDate を追加した。
そういった目的のために NSManagedObject には -[awakeFromInsert] が用意されている。
Mac Dev Center: NSManagedObject Class Reference - awakeFromInsert
NSManagedObject が新規に作成される時に呼び出される。サブクラスでこれをオーバーライドすると初期化処理を書く事ができる。
こんな感じ。
- (void) awakeFromInsert {
[super awakeFromInsert];
[self setPrimitiveValue:[NSDate date] forKey:@"createdDate"];
}
上記では createdDate に現在日時をセットしている。この awakeFromInsert には利用上いくつか注意点がある。
- 必ず先頭で親クラスの awakeFromInsert を呼び出す
- [1]作成 => [2]Undo(作成取り消し) => [3]Redo(再作成) の操作を行った場合、[3]では呼び出されない
- メソッド内で fetch操作を行うと副作用が出る(場合がある)
- primitive accessor (setPrimitiveValue:forKey:など) を使うのが望ましい。これは Undo/Redoが正しく働かせるため。
self.createdDate = [NSDate date];