【发布时间】:2015-08-30 19:47:55
【问题描述】:
我正在尝试在 NSArrayController 的绑定中设置排序描述符,但我无法找到如何执行此操作的示例。
我有一个 NSArrayController 将它绑定到核心数据,我想对数据进行排序。我的问题是如何使用绑定来做到这一点:
【问题讨论】:
标签: cocoa-bindings nsarraycontroller nssortdescriptor
我正在尝试在 NSArrayController 的绑定中设置排序描述符,但我无法找到如何执行此操作的示例。
我有一个 NSArrayController 将它绑定到核心数据,我想对数据进行排序。我的问题是如何使用绑定来做到这一点:
【问题讨论】:
标签: cocoa-bindings nsarraycontroller nssortdescriptor
我认为您的意思是您想直接在 NIB 中输入排序描述符。你不能那样做。
绑定允许您将数组控制器的sortDescriptors 属性连接到其他控制器对象的属性,以便它们保持同步。也就是说,您需要一些对象来实现一个属性,该属性是NSSortDescriptor 对象的索引集合(如数组)。这可能是窗口或视图控制器。然后,您可以将数组控制器的排序描述符绑定到该对象,并使用命名该属性的键路径。
这不允许您在 NIB 中设置排序描述符本身。
【讨论】:
在 Swift5.2 和 Xcode12.2 上查看 @user1751240 的答案后,我可以提供 2 种方法来解决最初的问题:
// Directly after arrayController will init
override func awakeFromNib() {
super.awakeFromNib()
let descriptors = [NSSortDescriptor(key: "artistName",
ascending: false,
selector: #selector(NSString.caseInsensitiveCompare))]
arrayController.sortDescriptors = descriptors
}
@objc
var sortByName: [NSSortDescriptor] {
[NSSortDescriptor(key: "artistName",
ascending: false,
selector: #selector(NSString.caseInsensitiveCompare))]
}
【讨论】: