Objective c 对NSTableColumn内容进行排序

Objective c 对NSTableColumn内容进行排序,objective-c,sorting,interface-builder,nstablecolumn,Objective C,Sorting,Interface Builder,Nstablecolumn,我对NSTableColumn内容排序有问题。在my NSTableView中有三列:文件、大小和路径。内容存储在NSMutableArray中。该数组中的每个对象都是一个NSDictionary,包含三个键:file、size和path-每个键的值都是一个NSString 在Interface Builder中,我可以在每个表列的属性中选择排序选项: 选择器:IB输入了“compare:”我认为这是可以的,因为我比较NSString。 排序键——我想这就是问题所在——我不知道在这里输入什么 有

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

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


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

键是您在字典中用于检索值的
键。

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

如果您的键是@“file”、@“size”、@“path”,并且您希望对
文件
进行排序,请尝试将
值.file
放入IB中的
排序键
字段


使用在将
值插入
NSDictionary
时使用的键,这样我就找到了完整的解决方案

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

其中“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一切都应该自动运行。我刚刚保存了所有文件并构建了应用程序。它正常运行了。:)

帮助我的网站:

谢谢你的回复,但我不知道答案。我看到了这个窗口:我感觉这比在我的应用程序中添加一段代码要简单。你认为我应该在“排序键”字段中输入什么?编辑:删除了
混乱的
代码示例,它是为了向你展示如何在代码中完成,以便你看到IB值之间的联系和代码。但看到它使事情复杂化,我删除了它。所以现在应该清楚应该在IB中插入什么。不起作用。我也尝试了这些:-valueForKey:@“path”-objectForKey:@“file”-value.objectForKey:@“file”“没有人在工作。。不知道该怎么办。也许我应该创建一些绑定之类的?从谁的角度来看,我应该写这把钥匙?好的。。我真的不知道该怎么办。你能再发一次密码吗?我可能会用它做点什么。它很好地救了我免于发疯……:)这一次让我很生气,我找到了解决办法我会小心的!
-(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]; 
}