Mac OS X 10.2でも動作させるための道のり

まずカラムがクリックされたことを受け取らなければなりません。NSOutlineViewの親クラス、NSTableViewには、

- (void)tableView:(NSTableView *)tableView 
	sortDescriptorsDidChange:(NSArray *)oldDescriptors

というソートに適したメソッドがある(NSTableViewのdataSourceの接続先で呼ばれる)のですが、残念ながらこのメソッドはMac OS X 10.3以降でないと使えません。仕方ないので自分でカラムをクリックしたときを取得しなければならないので、今度は、

- (void)outlineView:(NSOutlineView *)outlineView 
	mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn

を使おうとしたのですが、こいつもMac OS X 10.3以降でのみの実装らしいです。NSTableViewの同名のメソッドは10.2でもあると言うのに…。
で、仕方ないので、

- (BOOL)outlineView:(NSOutlineView *)outlineView 
	shouldSelectTableColumn:(NSTableColumn *)tableColumn

を使うことにしました。この中でソートを行って、ソートの向きを表す画像をカラムにつけて、クリックされたカラムを選択表示して、データをリロードして、という処理を行い、最後にNOを返します。何故NOを返すのかと言うと、ここでYESを返してしまうと、既に選択されているカラムを再度選択したときにこのメソッドが呼び出されなくなってしまうからです。これでは「同じカラムを再度選択したときは整列の順序を逆にする」ことができなくなってしまいます(順序が決まっているのだったら気にしなくてもいいけど)。