我在将NSPopUpButton绑定到NSArrayController时遇到困难。 数组控制器管理类Plant的一个数组(植物),该数组具有一个名为commonName的属性,该属性应在按钮中列出。我已经搜索了几天,但无法找到为什么这行不通。我能够获得显示字符串数组元素的按钮,但不能显示plants数组。程序运行时,按钮没有任何元素,对单击没有反应。
我已经包含了属性和绑定的屏幕截图,但这是一个描述:
ArrayController
按钮绑定
这是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
}
}
这是Plant类的代码:
@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的属性和绑定的屏幕截图。非常感谢您的帮助。
答案 0 :(得分:1)
两项更改:
您必须使plants
也符合KVC
@IBInspectable @objc dynamic var plants: [Plant] = []
按钮绑定-内容值:绑定到...模型密钥路径= 通用名(删除objectValue.
)