#cocoa #nstableview #cocoa-bindings
#какао #nstableview #привязки к cocoa
Вопрос:
В моем приложении есть следующие модели.
Board
, содержит свойство NSMutableArraylists
типаList
нижеList
, содержит свойство NSArraycards
типа Card нижеCard
, имеет свойство NSStringname
Таким образом, связь является 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. Хорошее понимание проблемы. Это решило проблему! Я даже не был близок к созданию второго кончика для элемента представления коллекции.