首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对NSTableColumn内容排序

对NSTableColumn内容排序
EN

Stack Overflow用户
提问于 2010-03-08 07:38:01
回答 2查看 6.6K关注 0票数 9

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

在界面生成器中,在每个表列的属性中,我可以选择排序选项:选择器: IB输入" compare :“,我认为这是可以的,因为我比较NSStrings。排序关键字--我想这就是问题所在--我不知道在这里输入什么。

有什么线索吗?如果你对我的代码有任何疑问,请提出来。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-15 00:10:48

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

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

代码语言:javascript
复制
Sort key: file

其中'file‘是在您的列中显示内容的字典的键。

代码语言:javascript
复制
Selector: compare:

标准排序函数。

现在,保存此处的所有更改并跳转到Xcode,转到其中的类,该类是NSTableView中显示的数据源模型。您应该已经知道这里需要两个方法:

代码语言:javascript
复制
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
 *)tableColumn row:(NSInteger)row

这两个是遵循NSTableDataSource非正式协议所必需的。你可以在MacDev中心读到它。

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

代码语言:javascript
复制
-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors

它可以包含一个非常简单的代码来做这件事:

代码语言:javascript
复制
-(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

票数 12
EN

Stack Overflow用户

发布于 2010-03-08 07:53:38

key键是您在字典中用来检索值的

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

如果你的键是@"file",@"size",@"path“,并且你想按file排序,那么试着把value.file放到IB的Sort Key字段中。

使用在NSDictionary中插入values时使用的密钥。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2398481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档