前回のコードを改良した。
改良点
前回はレコードの挿入毎にプロパティの一覧を取得していた。NSArrayController 初期化時にモデルのクラスは Nibからわかるのでこのタイミングで KVO監視対象のリストを作ってしまうようにした。
- (void)_setup { self.undoManager = [[[NSUndoManager alloc] init] autorelease]; self.keys = [self _propertyListOfClass:[self objectClass]]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self != nil) { [self _setup]; } return self; }これに伴い挿入処理でプロパティリストを取得する処理が不要になった。
またプログラミングで setObjectClass: が呼ばれた場合を想定してこれをオーバーライドしておく。
{ [super setObjectClass:objectClass]; self.keys = [self _propertyListOfClass:objectClass]; }
ソースコード
GitHub からどうぞ。
ArrayControllerUndoSample at 2010-12-24b from xcatsan/MacOSX-Sample-Code - GitHub
Responses
Leave a Response