Отсутствуют привязки Cocoa, заголовок ячейки NSTableColumn

#cocoa #nstableview #cocoa-bindings

#какао #nstableview #привязки к cocoa

Вопрос:

В моем приложении есть следующие модели.

  • Board , содержит свойство NSMutableArray lists типа List ниже
  • List , содержит свойство NSArray cards типа Card ниже
  • Card , имеет свойство NSString name

Таким образом, связь является Board -> to-many List -> to-many Card

У меня работает интерфейс master-detail на основе NSCollectionView. В подробном интерфейсе у меня есть NSTableView, который я хочу заполнить.

Привязки настраиваются следующим образом:

BoardArrayController -> привязан к владельцу файла

  • ** Путь к ключу модели: платы
  • ** Режим: класс
  • ** Прототип элемента: элемент просмотра платы

ListArrayController -> привязан к BoardArrayController.

  • ** Клавиша контроллера: выбор
  • ** Путь к ключу модели: списки
  • ** Режим: класс
  • ** Прототип элемента: элемент просмотра списка

CardArrayController -> привязан к ListArrayController

  • ** Клавиша контроллера: выбор
  • ** Путь к ключу модели: карты
  • ** Режим: класс

В представлении основной коллекции содержимое привязано к BoardArrayController

  • ** Ключ контроллера: упорядоченные объекты
  • ** selectionIndexes также привязан к BoardArrayController.

В представлении сбора сведений содержимое привязано к ListArrayController

  • ** Ключ контроллера: упорядоченные объекты

Столбец NSTableView (в прототипе элемента) привязан к CardArrayController

  • ** Ключ контроллера: упорядоченные объекты
  • ** Путь к ключу модели: имя

Проблема

NSTableView подробного интерфейса заполняется правильным количеством карточек для определенного списка. Однако заголовок ячейки пуст. Я могу щелкнуть по строкам и увидеть выделение, но, к сожалению, текста нет.

Ответ №1:

Существует несколько табличных представлений, по одному для каждого элемента в представлении коллекции сведений, верно? И содержимое каждого табличного представления должно отражать карточки для списка, который он представляет. Содержимое различных табличных представлений не должно зависеть от того, какой список выбран.

Поскольку должно быть несколько табличных представлений с независимым содержимым, все они не могут быть привязаны к одному контроллеру массива. Требуется несколько контроллеров CardArrayControllers, по одному для каждого элемента в представлении коллекции сведений (он же каждый список).

Самый простой способ сделать это — переместить представление элемента представления коллекции в его собственный кончик. Элемент представления коллекции в первом конусе должен быть настроен с именем кончика этого вторичного кончика, который я описываю. Это выходное окно просмотра не должно быть подключено ни к чему.

Настройте класс заполнителя владельца файла во вторичном указателе на значение be NSCollectionViewItem , поскольку именно он будет загружать и владеть им. Все привязки в этом указателе должны проходить через representedObject свойство этого объекта-заполнителя. В этом наконечнике должен быть контроллер массива, в основном то, что у вас сейчас есть как CardArrayController. Его содержимое будет привязано к файлу Owner.representedObject.cards.

Таким образом, каждый список для выбранной платы имеет соответствующий элемент в представлении коллекции сведений. Этот элемент representedObject автоматически устанавливается в тот конкретный список, который он представляет. Элемент представления коллекции загрузит дополнительный элемент для построения своего представления. Этот кончик будет иметь как представление (включая табличное представление), так и контроллер массива для карточек этого списка.

Теперь привяжите столбец представления таблицы (во вторичном корешке) к CardArrayController (в том же самом корешке). Это предполагает, что вы используете NSCell табличное представление на основе an. Если вы используете табличное представление на основе представления, вам необходимо настроить привязки по-другому.

Комментарии:

1. Хорошее понимание проблемы. Это решило проблему! Я даже не был близок к созданию второго кончика для элемента представления коллекции.