NSPopupButton на основе представления NSTableView: заставить работать привязки
Я пытаюсь достичь чего-то, что должно быть простым и довольно распространенным: наличие привязок, заполненных NSPopupButton, внутри привязок, заполненных NSTableView. Apple описывает это для таблицы на основе ячеек в своей документацииРеализация отношений To-One с помощью всплывающих меню и это выглядит так:
Я не могу заставить это работать для таблицы на основе представления. Всплывающее окно «Автор» не будет заполняться независимо от того, что я делаю.
У меня есть два контроллера массива, один для элементов в таблице (Предметы) и один для авторов (Авторы), оба связаны с соответствующими объектами в моей основной модели данных. Я связываю NSManagedPopup в своей ячейке следующим образом в конструкторе интерфейса:
содержание ->Авторы (Ключ контроллера:arrangedObjects)Значения содержимого ->Авторы (Ключ контроллера:arrangedObjects, Ключевой путь модели:имя)Выбранный объект ->Вид ячейки таблицы (Путь к модели ключа:objectValue.authorЕсли я помещу всплывающее окно где-нибудь за пределами таблицы, оно будет работать нормально (за исключением, очевидно, выбора), поэтому я предполагаю, что настройка привязки должна быть в порядке.
Вещи, которые я уже пробовалКто-то предложилВременное решение с использованием свойства IBOutlet кАвторы контроллер массива, но это, похоже, не работает для меня.
Веще один вопрос было предложено создать подкласс NSTableCellView и программно установить необходимые соединения. Я попробовал это, но имел ограниченный успех.
Если я настрою привязки следующим образом:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
if ([tableColumn.identifier isEqualToString:@"Author") {
AuthorSelectorCell *authorSelectorCell = (AuthorSelectorCell *)view;
[authorSelectorCell.popupButton bind:NSContentBinding toObject:self.authors withKeyPath:@"arrangedObjects" options:nil];
[authorSelectorCell.popupButton bind:NSContentValuesBinding toObject:self.authors withKeyPath:@"arrangedObjects.name" options:nil];
[authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author" options:nil];
}
return view;
}
всплывающее окно показывает список возможных авторов, но текущий выбор всегда отображается как «Нет значения». Если я добавлю
[authorSelectorCell.popupButton bind:NSSelectedValueBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];
текущий выбор полностью пуст. Единственный способ отобразить текущий выбор - установить
[authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];
который сломается, как только я выберу другого автора, так как он будет пытаться назначитьNSString*
чтобыAuthor*
свойство.
Есть идеи?