NSTreeControllerで使用するObjectの変換についてのメモ¶
NSTreeControllerでnodeを示すのに使用されるObject¶
- NSTreeNode¶
NSTreeControllerで木構造のノードを管理しやすくするためのクラス。このクラスのインスタンスから、自分自身のNSIndexPathや、NSManagedObjectへの参照を得ることができる。 親ノード、小ノードを手繰ることが出来る。
- NSIndexPath¶
ノードの位置を数字の列で指定するクラス。各ノードは、親のオブジェクトのNSArrayに入っている。 この、NSArrayのindexの値を複数持つことで、fileSystemのパスのように目的のノードの位置を指定することができる。 2/22追記:選択範囲を"状態の保存"で保存する場合は、このindexPathを使用するのが望ましい。NSTreeNodeやNSManagedObjectは保存ファイルやポインターに依存しているので、識別子の変換作業が追加で必要になる。
- NSManagedObject¶
NSTreeControllerが参照するモデルとしてCoraDateを使用する場合に、ノードのデータ本体としてこのクラスのサブクラスが使用される。NSTreeNodeのrepresentedObjectに設定される。
- row¶
NSTreeControllerがNSTableViewやNSOutlineViewに結び付けられている時に、表示中の0から始まる行番号を示す。表示上の値であるため、兄弟ノードの子ノードが表示の為に開閉されると、子ノード分増減する。
上記のObjectの相互変換¶
NSTreeNodeから各種Objectへの変換¶
もっとも簡単に変換できる。気をつけることは、rowはviewにしか存在しない概念なので、NSOutlineViewで変換するしかないことぐらい。
型 |
方法 |
---|---|
NSIndexPath |
NSTreeNode.indexPath |
NSManagedObject |
NSTreeNode.representedObject |
row |
[NSOutlineView rowForItem:NSTreeNode] |
NSIndexPathから各種Objectへの変換¶
一度NSTreeNodeに変換してからそれぞれの型に変換する。
型 |
方法 |
---|---|
NSTreeNode |
[NSTreeController.arrangedObjects descendantNodeAtIndexPath:NSIndexPath] |
NSManagedObject |
[NSTreeController.arrangedObjects descendantNodeAtIndexPath:NSIndexPath].representedObject |
row |
[NSOutlineView rowForItem:[NSTreeController.arrangedObjects descendantNodeAtIndexPath:NSIndexPath]] |
NSManagedObjectから各種Objectへの変換¶
NSTreeController.arrangedObjectsを使って、総なめする以外には方法はない。
コーディングするときは、NSManagedObjectは中間表現としては使ってはならない。NSIndexPathかNSTreeNodeを使用すること。
rowから各種Objectへの変換¶
rowはviewにしか存在しない概念なので、NSOutlineViewでNSTreeNodeへ変換する。 その後、それぞれの型に変換する。
型 |
方法 |
---|---|
NSIndexPath |
[NSOutlineView itemAtRow:row].indexPath |
NSTreeNode |
[NSOutlineView itemAtRow:row] |
NSManagedObject |
[NSOutlineView itemAtRow:row].representedObject |
なお、キャストなどは省略した。上記のコードはコピペでは動かない。
Comments
comments powered by Disqus