9

我在排序 NSTableColumn 内容时遇到问题。在我的 NSTableView 中有三列:文件、大小、路径。内容存储在 NSMutableArray 中。这个数组中的每个对象都是一个包含三个键的 NSDictionary:文件、大小和路径——每个对象的值都是一个 NSString。

在 Interface Builder 中,在每个表列的属性中,我可以选择排序选项: 选择器:IB 输入“比较:”我认为可以,因为我比较了 NSStrings。排序键 - 这就是我认为的问题 - 我不知道在这里输入什么。

有什么线索吗?如果您对我的代码有任何疑问,请询问。

4

2 回答 2

12

所以我找到了完整的解决方案。

首先,转到界面生成器。选择要排序的列。转到列的检查器并选择第一个按钮以查看“表列属性”。设置适当的值(从字面上看,不需要 " 或 ' 或 @):

Sort key: file

其中“文件”是在您的列中显示内容的字典的键。

Selector: compare:

标准排序功能。

现在,保存所有更改并跳转到 Xcode,到模型所在的类,NSTableView 中显示的数据源。您应该已经知道那里需要两种方法:

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

这两个是符合 NSTableDataSource 非正式协议所必需的。你可以在 MacDev 中心阅读它。

现在您所要做的就是添加一个新方法:

-(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您在字典中用于检索值的键。

在您的情况下,您有三个键:文件、大小和路径。选择要排序的那个。键用于从要用于排序的每条记录中检索值。

如果您的键是@"file"、@"size"、@"path",并且您想要排序,请file尝试放入IB 中value.file的字段。Sort Key

使用values插入NSDictionary.

于 2010-03-07T23:53:37.590 回答