привязка кнопки NSPopupupton к массиву классов - PullRequest
0 голосов
/ 30 декабря 2018

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

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

ArrayController

  1. Атрибуты: Mode = Class;Имя класса = TestDB.Plant (TestDB - это название проекта)
  2. Binding: Bound to View Controller;Путь к ключевой модели = заводы

Связывания кнопок

  1. Содержимое: привязано к контроллеру массива;Клавиша контроллера = selectedObjects
  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 Ответ

0 голосов
/ 30 декабря 2018

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

  1. Необходимо сделать plants также KVC-совместимым

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

...