[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月24日b from xcatsan/MacOSX-Sample-Code - GitHub

Responses

Leave a Response

[フレーム]

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

  • 公式リファレンスの Q&A に解説がある。 Technical Q&A QA1551: Detecting the start and end edit sessions of a cell in NSTableView. 方法は Delegate と Not...
  • 2011年06月09日 追記  UITableViewCell の Identifier 設定を忘れてたので追記しました。 UINib を使うと簡単に Nib で定義した UITableViewCell が使える。 今回のサンプル: [関連] Cocoaの日々: [iO...
  • Asset Catalogには画像以外のデータも置ける。サウンドファイル(.aif)を置いてみた。 取り出すには NSDataAsset を使う。 let sound = NSDataAsset(name: name) // use sound.data 取り出したサウ...
  • パスワードを暗号化して安全に iPhone/iPad へ保管したい。iOS はこの用途の為に Keychain Services を提供している。今回は Keychain Services について調べてみた。リファレンスの内容に加え、独自に調査・検証した結果をまとめてある。動作...
  • Core Data を使ったアプリケーションで下のような検索機能を実装している。 設定された値を元に NSPredicate を作成し、Core Data に対して検索をかけるのだが、こういう場合に NSCompoundPredicate が役に立つ。 NSCompound...

AltStyle によって変換されたページ (->オリジナル) /