2011年6月2日木曜日

Cocoa NSTreeControllerを調べる(6)NSIndexPath

NStreeControllerのSlectionを操ろうとすると、NSIndexPathを作ってそれをsetSelectionIndexPathでセットしなければいけない。

NSIndexPathを作るのは簡単で、とりあえず[NSIndexPath indexPathWithIndex:0]とクラスメソッドを使えば「最初のindexが0のNSIndexPath」を作ることができる。内蔵HDDのことだけを考えればこれでいいわけだが、リムーバブルメディアがあるのでそう簡単にはいきそうにない。

indexPathの追加も簡単。indexPath=[indexPath indexPathByAddingIndex:newIndex];てな感じでどんどん階層を深くしていくことができる。これで試しに{0,4,1}みたいなindexPathを作ってtreeControllerにセットすると、ちゃんとOutlineViewで望みのディレクトリを選択して、表示できるまでスクロールまでしてくれる。

そこで選択したいディレクトリのフルパスから、indexPathを作成していく作業に移る。
ところが、内蔵HDDを表すモデルの一番根元のフルパスは、もちろん「/」。しかしリムーバブルメディアの場合は、必ず「/volumes」以下にマウントされるので、「/Volumes/なんとか」が一番根本となる。だから単純にフルパスのpathComponentsを再結合していくわけにはもいかない。

このあたりをすっきりと説明する言葉を持っていないのが残念だ。自分用備忘録なので仕方ないけど。とにかく本日は、pathComponentsで分解したフルパスのobjectAtIndex:1に「Volumes」がある時は特別な処理をする、というところまで。

0 件のコメント:

コメントを投稿