このエントリーにはまとめのエントリーが書かれました.新しいエントリーを参照してください.NSArrayController(NSTableView)の選択結果の取得について
http://edotprintstacktrace.blogspot.com/2007/11/nsarraycontrollernstableview.html
ーー
さてココまで来て,テーブルを行選択する度に
イベントをおこして欲しい!となりました(私が).
KVOはあるオブジェクトのある"Model Key Path"でアクセスできる値を
観測していて変化があったときに登録したオブジェクトの
KVO用メソッドを呼んでくれるというものです(説明できてるかな…).
さて,具体的(?)に.
前述のNSArrayControllerを取得したとして,こいつの
selectionIndexesという値を以下のようにオブジェクト(ここではself)を登録する.
[_nsArrayController addObserver:self
forKeyPath:@"selectionIndexes"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];
で登録されているモノが呼び出すのは以下のようなメソッド.
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([keyPath isEqual:@"selectionIndexes"]){
//event!
}
}
#注意:選択情報のもとはNSTableViewのselectionIndexesです.
#これをNSArrayControllerにbindすることで
#NSArrayControllerだけコード側でみれば良い状態にしていることを前提としてます.
#これをしない場合はNSTableViewをコード側で取得してこれにKVOをしてあげてください.
となる.うーんやっぱりNSArrayControllerを取得しないといけないのは正しいのかな?
でも要素の登録もController経由で行うというのは正しい姿だと思うから…あってる?.
そもそもNSArrayControllerにNSMutableArrayを設定するのが間違い?
追記(2008/10/06):GUIのKVO(?)について書いた.
0 件のコメント:
コメントを投稿