[英]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.