Привязка кнопки NSPopupupton к массиву классов
У меня возникают проблемы с привязкой NSPopUpButton к NSArrayController. Контроллер массива управляет массивом (plant) класса Plant, у которого есть свойство с именем commonName, которое должно быть указано в кнопке. Я искал несколько дней, и я не могу понять, почему это не работает. Я могу получить кнопку для отображения элементов массива строк, но не с массивом растений. Когда программа запускается, кнопка не имеет элементов и не реагирует на нажатия.
Я включил скриншот атрибутов и привязок, но вот описание:
ArrayController
- Атрибуты: Mode = Class; Имя класса = TestDB.Plant (TestDB - это название проекта)
- Привязка: привязана к контроллеру вида; Модель Key Path = растения
Привязки кнопок
- Содержание: привязано к контроллеру массива; Контроллер Ключ = упорядоченные объекты
- Значения содержимого: привязан к контроллеру массива; Клавиша контроллера =ограмма объекта; Путь к ключу модели = 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
}
}
Это код для класса 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. Очень благодарен за любую помощь.
1 ответ
Два изменения:
Вы должны сделать
plants
также соответствует KVC@IBInspectable @objc dynamic var plants: [Plant] = []
Привязки кнопок - Значения содержимого: привязано к... Путь к ключу модели = commonName (удалить
objectValue.
)