[Mac] NSArrayController に Undo/Redo を実装する [3] 改良

2010年12月24日金曜日 | Published in | 0 コメント

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

[前回] Cocoaの日々: [Mac] NSArrayController に Undo/Redo を実装する [2] カスタムモデル

前回のコードを改良した。


改良点


前回はレコードの挿入毎にプロパティの一覧を取得していた。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

人気の投稿(過去 30日間)