如何使用NSTableColumn的绑定对NSArrayController进行排序?

时间:2014-01-14 00:30:33

标签: cocoa cocoa-bindings

这方面也有类似的问题,但我没有找到任何适合我的问题。我想要做的就是基于单击列标题重新排序表视图。而且我不想以编程方式执行此操作,因为我认为不必这样做。反正...

我有一个绑定到我的managedObjectContext的NSArrayController绑定的NSTableView。

对于特定的NSTableColumn,我将值绑定到Array Controller,模型键路径为“amount”,即NSNumber。

我在这个NSTableColumn的属性中看到,有一个“Sort Key”和一个“Selector”。我将排序键设置为“value.amount”(不知道为什么,但我在其他地方看到了这一点)并且选择器默认为“compare:”,这看起来很好。

然后对于NSArrayController,我看到一个名为“Sort Descriptors”的绑定,它绑定到“Shared User Defaults Controller”。 “控制器密钥”默认为“值”(我假设这就是我之前使用过值的原因),并将“模型密钥路径”设置为“金额”。

我认为这听起来很合理。但是(1)它不起作用,(2)当我想根据两个不同的列进行排序时呢?另外,(3)如何设置排序的默认方式?

更新:

好的,所以我将数组控制器绑定到托管对象上下文。我将表内容绑定到数组控制器排列的对象,并选择索引到数组控制器selectionIndexes。我有一个表列值绑定到数组控制器排列对象和相关的键。该列的排序键与compare:选择器的键相同。

当我点击标题时,表格没有重新排序。我应该绑定表的排序描述符吗?

如果可能的话,你能告诉我你的例子吗?

感谢您的帮助,

切特

1 个答案:

答案 0 :(得分:1)

您应该知道的第一件事是NSTableView和NSArrayController都可以对您的项目进行排序。你现在正试图将两者结合起来,并没有任何意义。对于简单的用途,只需依赖tableView。

所以,不要在NSArrayController中绑定任何东西。对于NSTableColumns,不要使用“value.amount”,只需使用“amount”。 “compare:”对于选择器来说很好。

我刚刚创建了一个小项目(没有代码)来演示这个,并且它在排序方面效果很好。