排序NSTableColumn内容

pin*_*cer 9 sorting objective-c interface-builder nstablecolumn

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

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

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

pin*_*cer 12

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

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

Sort key: file
Run Code Online (Sandbox Code Playgroud)

其中'file'是字典的关键字,内容显示在列中.

Selector: compare:
Run Code Online (Sandbox Code Playgroud)

标准排序功能.

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

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
 *)tableColumn row:(NSInteger)row
Run Code Online (Sandbox Code Playgroud)

这两个是符合NSTableDataSource非正式协议所必需的.您可以在MacDev中心阅读相关内容.

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

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors
Run Code Online (Sandbox Code Playgroud)

它可以包含一个非常简单的代码来执行以下操作:

-(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]; 
}
Run Code Online (Sandbox Code Playgroud)

就这样.它在我的应用程序中工作,希望它能在你的情况下工作:D一切都应该自动工作.我刚刚保存了所有文件并构建了应用程序.它奏效了.:)

帮助我的网站: CocoaDev:SortingNSTableView