処理はおおむね以下。
1.ファイル、もしくはフォルダが一個、または複数個放り込まれる
2.フォルダだった場合はサブフォルダの中身を取得する
3.ファイル名の末尾がaiffやwavだったらテーブルに追加する
まずはこれを実現すべく、今までの知識を総動員(というほど多くないけど)してサンプルプログラムを組み立てる。以前の「
動かない見本」でいうところの4番「ドラッグ&ドロップしたあと」の部分を修正した。
- (BOOL)performDragOperation:(id <nsdragginginfo>)sender
{
// 複数のファイルをドロップしている可能性もあるので、NSArrayに格納する必要がある
NSArray *fileNames = [[sender draggingPasteboard] propertyListForType:NSFilenamesPboardType];
// 投げられたファイルの判別を外部クラスに任せてみる。クラスメソッドの呼び出しということ?
NSMutableArray *mArray = [NSMutableArray arrayWithArray:[myProcess pdoDiscernArray:fileNames]];
// それをNSArrayControllerに追加
if (mArray)
[myArrCtrlr addObjects:mArray];
return YES;
}
で、Xcodeで新規クラス"myProcess"(NSObjectを継承したもの)を作り、そこに+ (NSMutableArray *)pdoDiscernArray:(NSArray *)ddItemというメソッドを用意して、放り込まれたファイルやフォルダの情報をそのまま(NSArrayのまま)渡して処理させる。これは
前回の、フォルダかどうか判断するメソッドを使う。クラスのメソッドを呼び出すので+を使う……のかな。相変わらずこういう部分を曖昧なまま進めていくので、突然壁に当たったり袋小路に入り込んだりするのだろう。いろいろ試してから解説書を読めば理解も深まるだろう、などと考えている。配布するならキッチリ理解しないといけないけど。
そうしてメソッド内でファイル名とキー(今回は@"tableContents"という名前)が対になったNSDictionaryを作り、それをNSMutableArrayに一つずつ追加していき、最終的に返り値として戻してやる。戻ってきた配列をNSArrayControllerのインスタンスとして用意したmyArrCtrlrに追加してやる。なおキーである@"tableContents"はNSTableColumnにバインドしてある。
これでひとまず最低限の動きが実現できた。次はこれを使って、実際にファイルに対して何かしらの処理をしていこうと思う。でもその前に、もう少し足場周りを固める必要があるような気もする。