NSTableView - 如何让自动排序和手动排序一起工作?

NSTableView - how to get automatic and manual sorting working together?

我在 MyViewController 中有一个 NSTableView 并绑定了一个数组控制器。我希望能够通过单击 table 列 header 对其进行排序,它也应该 auto-sort。因此,对于 auto-sort,我在 IB 中设置数组控制器的排序描述符绑定如下:

Bind to: MyViewController
Model Key Path: customSortDescriptors

在 MyViewController class 我添加了:

var customSortDescriptors:[NSSortDescriptor] {
    let sd = NSSortDescriptor(key: "string", ascending: true, selector: "localizedStandardCompare:");
    return [sd]
}

对于 IB 中的相关 table 列,我设置了:

Sort Key: string
Selector: caseInsensitiveCompare:

这工作正常,直到我点击 table 列 header 我收到错误消息的地方:

Error setting value for key path customSortDescriptors of object NSAutounbinder: 0x60000005e060 - a nonretaining proxy for MyApp.MyViewController: 0x6000000e6600 (from bound object NSArrayController: 0x6000001c0b40[entity: GeneratedData, number of selected objects: 0]): [MyApp.MyViewController 0x6000000e6600 setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key customSortDescriptors.

我不确定为什么会出现此错误。有人能告诉我哪里出了问题吗?为什么 MyViewController 不是键值 coding-compliant?默认情况下,NSViews 和 NSViewControllers 不是兼容的吗?

除此之外,排序没有问题,但我在 Xcode 中收到错误并想消除它。

我会被诅咒,但错误的原因显然是 属性 是只读的。所以添加一个 setter,或者更好的是,将代码简单地更改为:

var customSortDescriptors = [NSSortDescriptor(key: "string", ascending: true, selector: "localizedStandardCompare:")];

修复了错误,自动和手动排序都有效。