繁体   English   中英

排序NSTableColumn内容

[英]Sorting NSTableColumn contents

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

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

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

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

首先,转到Interface Builder。 选择要排序的列。 转到列的检查器并选择第一个按钮以查看“表列属性”。 设置适当的值(字面意思是,不需要“或”或@):

Sort key: file

其中'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

重点是key ,你在使用字典检索值。

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

如果你的密钥是@“file”,@“size”,@“path”,你想对file进行排序,那么尝试将value.file放入IB中的Sort Key字段。

使用在NSDictionary插入values时使用的键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM