我有NSTableView将它绑定到NSArrayController。我正在排序NSTableView并且它工作正常但是当我点击NSTableView的行时,我得到的不同值就像NSArrayController没有被排序。
以下是我对NSTableView进行排序的方法:
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"names" ascending:YES];
[self.names setSortDescriptors:[NSArray arrayWithObject:sd]];
例如,当我点击Name1时,我得到了Name2的值。我需要的是匹配NSTableView的值与NSArrayController。你们中的任何人都知道我做错了什么?或者如何对NSTableView和NSArrayController进行排序?
我真的很感谢你的帮助
答案 0 :(得分:1)
当我点击Name1时,我得到了Name2的值
如何获得价值?
我怀疑你在找错了地方。
首先,您应该将表视图的selectionIndexes
绑定绑定到数组控制器的selectionIndexes
属性。同样,您应该将表视图的sortDescriptors
绑定绑定到数组控制器的sortDescriptors
属性。
您的代码中self.names
引用的内容并不清楚。那是表视图还是数组控制器?就个人而言,我会通过设置数组控制器sortDescriptors
来设置表视图的排序顺序。
无论如何,在完成所有设置之后,当您想要获取所选对象时,您必须咨询阵列控制器,而不是可能提供阵列控制器内容的模型。 (你实际上没有说,但我假设您的阵列控制器的contentArray
绑定绑定到模型中的索引集合属性。)
首先,您可以简单地查询其selectedObjects
属性。
或者,如果您从行索引开始,则必须使用该索引编入其arrangedObjects
。
您必须不只需将行或选择索引和索引放入模型的索引集合属性中。在将对象提供给表视图之前,数组控制器已重新排列对象(基于排序描述符,可能还有过滤谓词)。因此,索引不再对应于模型中的原始索引集合。