Привязка кнопки NSPopupupton к массиву классов

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

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

ArrayController

  1. Атрибуты: Mode = Class; Имя класса = TestDB.Plant (TestDB - это название проекта)
  2. Привязка: привязана к контроллеру вида; Модель Key Path = растения

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

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

Это код для класса 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 ответ

Решение

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

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

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

Другие вопросы по тегам