我正试图在NSArrayController的绑定中设置排序描述符,但我无法找到如何执行此操作的示例。
我有一个NSArrayController将它绑定到核心数据,我想对数据进行排序。我的问题是我如何使用绑定来做到这一点:
答案 0 :(得分:1)
我认为你的意思是你想直接在NIB中输入排序描述符。你不能这样做。
绑定允许您将阵列控制器的sortDescriptors
属性连接到某个其他控制器对象的属性,以便它们保持同步。也就是说,您需要一些对象来实现一个属性,该属性是NSSortDescriptor
对象的索引集合(如数组)。这可能是窗口或视图控制器。然后,您可以使用命名该属性的键路径绑定数组控制器的绑定描述符绑定到该对象。
这不允许您在NIB中设置排序描述符。
答案 1 :(得分:1)
假设您想按artistName对数据进行排序(降序而不关心区分大小写),您可以这样做
func sortByName() -> [NSSortDescriptor] {
return [NSSortDescriptor(key: "artistName", ascending: false, selector: #selector(NSString.caseInsensitiveCompare))]
}
的一部分
答案 2 :(得分:0)
在 Swift5.2 和 Xcode12.2 上查看@user1751240 的答案后,我可以提供两种方法来解决最初的问题:
// 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))]
}