Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 以编程方式对NSTableView排序_Macos_Cocoa_Swift_Sorting_Nstableview - Fatal编程技术网

Macos 以编程方式对NSTableView排序

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

我知道如何让tableview用户单击sortable,但是如何以编程方式对其排序(不使用NSArrayController)?文件在这方面做得很简略。以下是我得到的:

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进行排序,但你需要一个数组来排序。。。您的错误消息说明了类似的情况,似乎有一种方法可以对字典进行排序,如下所示:但我还没有测试过。无论如何,感谢您解释如何对表视图进行排序,这解决了我原来的问题!排序链接似乎采用了缓存方法并将其绑定到类中,但确实,这也有效。:-)