Мне трудно привязать NSPopUpButton к NSArrayController. Контроллер массива управляет массивом (заводами) класса Plant, у которого есть свойство с именем commonName, которое должно быть указано на кнопке. Я искал несколько дней и не могу понять, почему это не работает. Я могу заставить кнопку отображать элементы массива строк, но не с массивом растений. При запуске программы кнопка не имеет элементов и не реагирует на нажатие.
Я включил снимок экрана с атрибутами и привязками, но вот описание:
ArrayController
- Атрибуты: Режим = Класс; Имя класса = TestDB.Plant (TestDB - это имя проекта)
- Привязка: привязана к контроллеру представления; Ключевой путь модели = растения
Привязки кнопок
- Содержимое: привязано к контроллеру массива; Клавиша Контроллера = Расположенные Объекты
- Значения содержимого: привязаны к контроллеру массива; Клавиша Контроллера = connectedObjects; Путь к ключу модели = 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. Очень благодарен за любую помощь.