NSPopupButton com base em NSTableView: obtendo ligações para trabalhar

Descrição do Problema

Eu estou tentando conseguir algo que deve ser simples e bastante comum: ter um binds preenchido NSPopupButton dentro de ligações preenchidas NSTableView. A Apple descreve isso para uma tabela baseada em célula na sua documentaçãoImplementando Relacionamentos To-One Usando Menus Pop-Up e parece assim:

Não consigo fazer isso funcionar para uma tabela baseada em visualização. O pop-up "Autor" não vai se preencher, não importa o que eu faça.

Eu tenho dois controladores de matriz, um para os itens na tabela (Unid) e um para os autores (Autores), ambos associados às respectivas entidades em meu modelo de dados principais. Eu vinculo o NSManagedPopup na minha célula da seguinte forma no construtor de interface:

Conteúdo ->Autores (Chave do controlador:arrangedObjects)Valores de Conteúdo ->Autores (Chave do controlador:arrangedObjects, Caminho-chave do modelo:nome)Objeto selecionado ->Visão de célula de tabela (Caminho-chave do modelo:objectValue.author

Se eu colocar o popup em algum lugar fora da tabela, ele funcionará bem (exceto para a seleção, obviamente), então eu acho que a configuração de ligação deve ser ok.

Coisas que já tentei

Alguém sugeriu umsolução alternativa usando uma propriedade IBOutlet aoAutores controlador de matriz, mas isso não parece funcionar para mim também.

Emoutra pergunta SO foi sugerido para subclasse NSTableCellView e estabelecer as conexões necessárias programaticamente. Eu tentei isso, mas tive apenas um sucesso limitado.

Se eu configurar as ligações da seguinte forma:

- (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;
}

o pop-up mostra a lista de possíveis autores, mas a seleção atual sempre aparece como "Sem valor". Se eu adicionar

[authorSelectorCell.popupButton bind:NSSelectedValueBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];

a seleção atual está completamente vazia. A única maneira de fazer a seleção atual aparecer é configurando

[authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];

que vai quebrar assim que eu selecionar um autor diferente, uma vez que vai tentar atribuir umNSString* para umAuthor* propriedade.

Alguma ideia?

questionAnswers(3)

yourAnswerToTheQuestion