我对NstableColumn内容进行排序有问题。在我的NstableView中有三列:文件,大小,路径。内容存储在nsmutablearray中。此数组中的每个对象都是一个包含三个键的nsdictionary:文件,大小和路径 - 每个键是NSString。

在接口构建器中,在每个表列的属性中,我可以选择排序选项:选择器:ib输入“ compare:”我认为可以,因为我比较了nsstrings。分类钥匙 - 这就是我认为的问题 - 我不知道在这里输入什么。

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

有帮助吗?

解决方案

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

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

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

其他提示

关键是 key 您在字典中使用该值。

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

如果您的键是 @“文件”, @“ size”, @“ path”,则要排序 file 然后尝试放置 value.file 进入 Sort Key IB中的字段。

使用插入时使用的键 values 进入你的 NSDictionary.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top