2011年6月1日水曜日

Cocoa NSTreeControllerを調べる(5)

OutlineViewを直接使っている状態から、NSTreeControllerを経由する方法に変更しようとしている。

delegateのoutlineViewSelectionDidChange:(NSNotification *)notificationを定義して、選択行が変更されると何が起きるかNSLogで出力してみる。

NSLog(@"%@",[outlineView itemAtRow:[outlineView selectedRow]]);で出力されるのは
NSTreeControllerTreeNode: 0x100647eb0, child nodes {}
やはりOutlineViewは単なる「見た目」だけの存在となるようだ。

FileSystemItem *item=[[treeController selectedObjects] objectAtIndex:0]とやれば、modelのオブジェクトに行き着くことができる。

modelに行き着くことができるならNSTreeControllerをEseに組み込んでもほぼ大丈夫と思われるが、ひとつだけ考え込んでいるのが

pathを与えられたら、OutlineViewの所定の行を選択状態にする

方法。前回終了時に表示していたディレクトリを復帰させる、とか、TableViewでディレクトリのダブルクリックでそのディレクトリの内容を表示、OutlineViewも連動する、といった場合に必要となる。

OutlineViewの場合はNSStringで探せばよかったわけだが、NSTreeControllerだと「所定の行を選択状態にする」ためにはNSIndexPathを使わないといけない。「/Applications/Chess.app/Contents」といった文字列から、「0,4,6,1」というNSIndexPathをどうやって作るか・・・それを考えているうちに時間切れとあいなった。明日以降。

0 件のコメント:

コメントを投稿