nstablecolumnコンテンツのソート
-
25-09-2019 - |
質問
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.file
に Sort Key
IBのフィールド。
挿入時に使用するキーを使用します values
あなたに NSDictionary
.