OS X:将NSTableView绑定排序到NSArrayController

时间:2015-08-30 17:22:47

标签: sorting nstableview nsarraycontroller nssortdescriptor

我有NSTableView将它绑定到NSArrayController。我正在排序NSTableView并且它工作正常但是当我点击NSTableView的行时,我得到的不同值就像NSArrayController没有被排序。

以下是我对NSTableView进行排序的方法:

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"names" ascending:YES];
[self.names setSortDescriptors:[NSArray arrayWithObject:sd]];

enter image description here

例如,当我点击Name1时,我得到了Name2的值。我需要的是匹配NSTableView的值与NSArrayController。你们中的任何人都知道我做错了什么?或者如何对NSTableView和NSArrayController进行排序?

我真的很感谢你的帮助

1 个答案:

答案 0 :(得分:1)

  

当我点击Name1时,我得到了Name2的值

如何获得价值?

我怀疑你在找错了地方。

首先,您应该将表视图的selectionIndexes绑定绑定到数组控制器的selectionIndexes属性。同样,您应该将表视图的sortDescriptors绑定绑定到数组控制器的sortDescriptors属性。

您的代码中self.names引用的内容并不清楚。那是表视图还是数组控制器?就个人而言,我会通过设置数组控制器sortDescriptors来设置表视图的排序顺序。

无论如何,在完成所有设置之后,当您想要获取所选对象时,您必须咨询阵列控制器,而不是可能提供阵列控制器内容的模型。 (你实际上没有说,但我假设您的阵列控制器的contentArray绑定绑定到模型中的索引集合属性。)

首先,您可以简单地查询其selectedObjects属性。

或者,如果您从行索引开始,则必须使用该索引编入其arrangedObjects

您必须只需将行或选择索引和索引放入模型的索引集合属性中。在将对象提供给表视图之前,数组控制器已重新排列对象(基于排序描述符,可能还有过滤谓词)。因此,索引不再对应于模型中的原始索引集合。