将 NSPopupbutton 绑定到 类 的数组

binding NSPopupbutton to an array of classes

我在将 NSPopUpButton 绑定到 NSArrayController 时遇到困难。 数组控制器管理 class 植物的数组(植物),它有一个 属性 命名的 commonName,它应该列在按钮中。我已经搜索了几天,但无法发现为什么这不起作用。我能够让按钮显示字符串数组的元素,但不能使用植物数组。程序运行时,按钮没有元素,点击没有反应。

我提供了属性和绑定的屏幕截图,但这里有一个描述:

数组控制器

  1. 属性:模式=Class; Class Name = TestDB.Plant (TestDB是 项目名称)
  2. 绑定:绑定到视图控制器;模型键 路径=植物

按钮绑定

  1. 内容:绑定到数组控制器;控制器键 = arrangedObjects
  2. 内容值:绑定到数组控制器;控制器键 = 安排对象;模型关键路径 = objectValue.commonName

这是来自 ViewController 的代码:

class ViewController: NSViewController {

@IBInspectable var plants: [Plant] = []
@IBOutlet weak var plantPopUp: NSPopUpButton!

    override func viewDidLoad() {
            super.viewDidLoad()

        //the real list will be pulled from a database, but I'm using
        //this to test binding the button
        plants = [Plant(commonName: "Asparagus", scientificName: "Asparagus officials"), 
          Plant(commonName: "Beet", scientificName: "Beta vulgaris")]

        //to redraw the button?? Doesn't change anything with or without
        plantPopUp.needsLayout.true
    }   
}

这是 class 工厂的代码:

@objc class Plant: NSObject {
    @objc dynamic var commonName: String
    @objc dynamic var scientificName: String

    init(commonName: String, scientificName: String) {
        self.commonName = commonName
        self.scientificName = scientificName
    }
}

这是 NSArrayController 和 NSPopupButton 的属性和绑定的屏幕截图。非常感谢任何帮助。

两个变化:

  1. 你必须plants也兼容 KVC

    @IBInspectable @objc dynamic var plants: [Plant] = []
    
  2. 按钮绑定 - 内容值:绑定到 ... 模型键路径 = commonName(删除 objectValue.