привязка NSPopupbutton к массиву классов

Мне трудно привязать NSPopUpButton к NSArrayController. Контроллер массива управляет массивом (заводами) класса Plant, у которого есть свойство с именем commonName, которое должно быть указано на кнопке. Я искал несколько дней и не могу понять, почему это не работает. Я могу заставить кнопку отображать элементы массива строк, но не с массивом растений. При запуске программы кнопка не имеет элементов и не реагирует на нажатие.

Я включил снимок экрана с атрибутами и привязками, но вот описание:

ArrayController

  1. Атрибуты: Режим = Класс; Имя класса = TestDB.Plant (TestDB - это имя проекта)
  2. Привязка: привязана к контроллеру представления; Ключевой путь модели = растения

Привязки кнопок

  1. Содержимое: привязано к контроллеру массива; Клавиша Контроллера = Расположенные Объекты
  2. Значения содержимого: привязаны к контроллеру массива; Клавиша Контроллера = 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. Очень благодарен за любую помощь.

Атрибуты и привязки


person Pam    schedule 30.12.2018    source источник


Ответы (1)


Два изменения:

  1. Вы должны сделать plants также совместимым с KVC

    @IBInspectable @objc dynamic var plants: [Plant] = []
    
  2. Привязки кнопок - значения содержимого: привязано к ... Путь к ключу модели = commonName (удалить objectValue.)

person vadian    schedule 30.12.2018