>580

NSOutlineViewの場合、横並び一列がデータひとつに対応します。
Finderのリスト表示で言うと、ファイルの場合は名前、作成日、容量等のデータをひとつの単位で管理していますね。
また、フォルダの場合も同様で、名前以外は表示物がないというデータを所有しています。

このひとまとまりを(設計者が)クラスにまとめ、その各々のインスタンスが
引数itemとして渡されます。
さらに、itemにnilが渡されたときは(仮想的な)トップレベルのアイテムだとして処理します。

手順としては、
1,- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
でそのアイテムが所有する子供の数を返します。
もちろんこのときitemがnilであれば、(実際に)トップレベルに表示するアイテムの数を返します。

2,- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item
で実際にアイテムを登録します。
indexは配列の要素番号のようなものです。

3,- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
これが実際に表示に使われるインスタンスを返す部分です。
itemの中でtableColumnの位置に表示するNSCell(のサブクラス)のインスタンスを返してやればいいわけです。

後は、子供が存在するアイテムのときに outlineView:isItemExpandable:
でYESを返してあげるようにすればrequireなメソッドは出来上がりです。