【问题标题】:NSArrayController bind it to sort descriptor using the nibNSArrayController 使用 nib 将其绑定到排序描述符
【发布时间】:2015-08-30 19:47:55
【问题描述】:

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

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

如果

【问题讨论】:

    标签: cocoa-bindings nsarraycontroller nssortdescriptor


    【解决方案1】:

    假设您想按艺术家姓名对数据进行排序(降序且不关心大小写),您可以这样做

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

    在绑定的“排序描述符”部分中,将此方法名称指定为模型键路径的一部分

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 你能举个例子吗?
      【解决方案3】:

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

      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))]
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多