我在对NSTableColumn内容进行排序时遇到问题。在我的NSTableView中有三列:文件、大小、路径。内容存储在NSMutableArray中。此数组中的每个对象都是一个包含三个键的值:文件、大小和路径-每个对象的值都是一个NSString。
在界面生成器中,在每个表列的属性中,我可以选择排序选项:选择器: IB输入" compare :“,我认为这是可以的,因为我比较NSStrings。排序关键字--我想这就是问题所在--我不知道在这里输入什么。
有什么线索吗?如果你对我的代码有任何疑问,请提出来。
发布于 2010-03-15 00:10:48
所以我找到了完整的解决方案。
首先,转到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
发布于 2010-03-08 07:53:38
key键是您在字典中用来检索值的。
在本例中,您有三个键:文件、大小和路径。选择要排序的记录。该键用于从要用于排序的每条记录中检索值。
如果你的键是@"file",@"size",@"path“,并且你想按file排序,那么试着把value.file放到IB的Sort Key字段中。
使用在NSDictionary中插入values时使用的密钥。
https://stackoverflow.com/questions/2398481
复制相似问题