NSArrayController使用nib将其绑定到排序描述符

时间:2015-08-30 19:47:56

标签: cocoa-bindings nsarraycontroller nssortdescriptor

我正试图在NSArrayController的绑定中设置排序描述符,但我无法找到如何执行此操作的示例。

我有一个NSArrayController将它绑定到核心数据,我想对数据进行排序。我的问题是我如何使用绑定来做到这一点:

enter image description here 我真的很感激,如果

3 个答案:

答案 0 :(得分:1)

我认为你的意思是你想直接在NIB中输入排序描述符。你不能这样做。

绑定允许您将阵列控制器的sortDescriptors属性连接到某个其他控制器对象的属性,以便它们保持同步。也就是说,您需要一些对象来实现一个属性,该属性是NSSortDescriptor对象的索引集合(如数组)。这可能是窗口或视图控制器。然后,您可以使用命名该属性的键路径绑定数组控制器的绑定描述符绑定到该对象。

这不允许您在NIB中设置排序描述符。

答案 1 :(得分:1)

假设您想按artistName对数据进行排序(降序而不关心区分大小写),您可以这样做

func sortByName() -> [NSSortDescriptor] {
    return [NSSortDescriptor(key: "artistName", ascending: false, selector: #selector(NSString.caseInsensitiveCompare))]
}

在"排序描述符"绑定部分,将此方法名称指定为模型关键路径sortDescriptionSection

的一部分

答案 2 :(得分:0)

Swift5.2Xcode12.2 上查看@user1751240 的答案后,我可以提供两种方法来解决最初的问题:

  1. 按代码:
   // Directly after arrayController will init
   override func awakeFromNib() {
        super.awakeFromNib()

        let descriptors = [NSSortDescriptor(key: "artistName",
                                            ascending: false,
                                            selector: #selector(NSString.caseInsensitiveCompare))]
        arrayController.sortDescriptors = descriptors
    }
  1. 来自笔尖:
    @objc
    var sortByName: [NSSortDescriptor] {
        [NSSortDescriptor(key: "artistName",
                          ascending: false,
                          selector: #selector(NSString.caseInsensitiveCompare))]
    }

Screenshot from IB