9

NSTableColumn コンテンツの並べ替えに問題があります。私の NSTableView には、ファイル、サイズ、パスの 3 つの列があります。内容は NSMutableArray に格納されます。この配列の各オブジェクトは、ファイル、サイズ、パスの 3 つのキーを含む NSDictionary です。それぞれの値は NSString です。

Interface Builder では、各テーブル列の属性で、並べ替えオプションを選択できます。セレクター: IB は「比較:」と入力しました。ソート キー - これが問題だと思います - ここに何を入力すればよいかわかりません。

手がかりはありますか?私のコードについて質問がある場合は、質問してください。

4

2 に答える 2

12

だから私は完全な解決策を見つけました。

まず、Interface Builder に移動します。並べ替えたい列を選択します。列のインスペクターに移動し、最初のボタンを選択して「テーブル列の属性」を表示します。適切な値を設定します (文字通り、" または ' または @ は必要ありません)。

Sort key: file

ここで、「ファイル」は、内容が列に表示される辞書のキーです。

Selector: compare:

標準のソート機能。

ここですべての変更を保存し、NSTableView に表示されるデータのソースであるモデルであるクラスの Xcode にジャンプします。そこには2つのメソッドが必要であることをすでに知っているはずです:

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
 *)tableColumn row:(NSInteger)row

これら 2 つは、NSTableDataSource 非公式プロトコルに準拠するために必要です。これについては、MacDev Center で読むことができます。

あとは、新しいメソッドを追加するだけです。

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

それを実行する非常に単純なコードを含めることができます。

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors 
{       
    NSArray *newDescriptors = [tableView sortDescriptors];
    [results sortUsingDescriptors:newDescriptors]; 
    //"results" is my NSMutableArray which is set to be the data source for the NSTableView object.
    [tableView reloadData]; 
}

それだけです。それは私のアプリで動作しています。あなたのケースで動作することを願っています:D すべてが自動的に動作するはずです。すべてのファイルを保存し、アプリをビルドしました。そしてそれはうまくいきました。:)

私を助けてくれたサイト: CocoaDev: SortingNSTableView

于 2010-03-14T16:10:48.017 に答える
2

キーはkey、値を取得するために辞書で使用するものです。

あなたの場合、ファイル、サイズ、パスの3つのキーがあります。並べ替えるものを選択します。キーは、ソートに使用される各レコードから値を取得するために使用されます。

キーが@"file"、@ "size"、@ "path"で、並べ替える場合は、IBのフィールドに入力してfileみてください。value.fileSort Key

に挿入するときに使用するキーを使用valuesしますNSDictionary

于 2010-03-07T23:53:37.590 に答える