Macos 以编程方式对NSTableView排序
我知道如何让tableview用户单击sortable,但是如何以编程方式对其排序(不使用NSArrayController)?文件在这方面做得很简略。以下是我得到的:Macos 以编程方式对NSTableView排序,macos,cocoa,swift,sorting,nstableview,Macos,Cocoa,Swift,Sorting,Nstableview,我知道如何让tableview用户单击sortable,但是如何以编程方式对其排序(不使用NSArrayController)?文件在这方面做得很简略。以下是我得到的: private func updateThemeTableView() { _tableViewDataDict = getAssociatedThemesFor(_type); _tableView.reloadData(); let sort = NSSortDescriptor(key: "The
private func updateThemeTableView()
{
_tableViewDataDict = getAssociatedThemesFor(_type);
_tableView.reloadData();
let sort = NSSortDescriptor(key: "Theme", ascending: true, selector: "caseInsensitiveCompare:");
_tableView.sortDescriptors = [sort];
}
但这不起作用
这里用的钥匙是什么?这应该是表视图列名还是列标识符(在IB中设置)
何时应用排序?(我假设在_tableViewDataDict收到数据并重新加载数据()之后,NSTableViewDataSource.viewForTableColumn()就可以开始工作了?)
排序选择器有效吗?或者我必须为此提供方法吗?设置表的排序描述符是不够的。您还需要响应
NSTableViewDelegate
方法可选的func tableView(uTableView:NSTableView,SortDescriptorsIDChange oldDescriptors:[AnyObject])
,方法是将排序描述符应用于数据模型,然后重新加载表的数据(通过reloadData()
)。无论是将排序描述符应用于整个表(不允许用户单击列标题)还是单个列(允许用户单击列标题),都是如此
如注释中所述,您无法对字典进行排序,因此需要缓存已排序的数组,并让表数据源方法引用数组而不是字典。为什么不在字典中对数据进行排序,然后重新加载tableView数据?这可能是一个解决方案。要不要解释一下?我尝试了_tableViewDataDict=sorted(_tableViewDataDict){$0.0<$1.0},但这给了我一个错误:无法将类型为“[(String,Int)]”的值分配给类型为“[String:Int]!”的值您的_tableViewDataDict的结构是什么?[Stirng:Int]?是的,_tableViewDataDict:[String:Int]嗯,我认为你不能对dict进行排序,但你需要一个数组来排序。。。您的错误消息说明了类似的情况,似乎有一种方法可以对字典进行排序,如下所示:但我还没有测试过。无论如何,感谢您解释如何对表视图进行排序,这解决了我原来的问题!排序链接似乎采用了缓存方法并将其绑定到类中,但确实,这也有效。:-)