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* свойство.

Есть идеи?

Ответы на вопрос(3)

Ваш ответ на вопрос