質問

nstablecolumnの内容をソートすることに問題があります。私のnstableviewには、ファイル、サイズ、パスの3つの列があります。内容はnsmutablearrayに保存されます。この配列内の各オブジェクトは、ファイル、サイズ、パスの3つのキーを含むnsdictionaryです - それぞれの値はnsstringです。

インターフェイスビルダーでは、各テーブル列の属性で、ソートオプションを選択できます。SELECTOR:IBは「比較:」を入力しました。キーを並べ替えてください - それが私が思う問題です - 私はここに何を入力するかわかりません。

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

役に立ちましたか?

解決

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

まず、インターフェイスビルダーに移動します。ソートする列を選択します。列の検査官に移動し、最初のボタンを選択して「テーブル列の属性」を表示します。適切な値を設定します(文字通り、「または 'または @が必要です):

Sort key: file

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

Selector: compare:

標準ソート関数。

ここですべての変更を保存し、Xcodeにジャンプして、モデルであるクラス、NSTABLEVIEWに示されているデータのソースにジャンプします。そこに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

他のヒント

キーはです key 辞書で使用して値を取得します。

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

キーが @"file"、 @"size"、 @"path"の場合、並べ替えたい場合 file 次に、置いてみてください value.fileSort Key IBのフィールド。

挿入時に使用するキーを使用します values あなたに NSDictionary.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top