Pergunta

Para a vida de mim, eu estou sendo continuamente perplexo com NSComboBox.

Eu criei um objeto que está em conformidade com o protocolo NSComboBoxDataSource, e implementado:

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;

I definir a instância do meu NSComboBox de usar uma fonte de dados, e definir este objeto como a fonte. Isso funciona muito bem, minha implementação retorna o número de itens e retorna um valor de NSString para um item em índices específicos.

Então eu decidir que eu quero fazer algo quando algo é selecionado, este é o lugar onde meus problemas começam. Não existe um método óbvio para substituir no protocolo NSComboBoxDataSource para lidar com a seleção de itens na caixa de combinação.

Então, eu também tenho meu objeto em conformidade com NSComboBoxDelegate e implementar:

- (void)comboBoxSelectionDidChange:(NSNotification *)notification;

Infelizmente, ao contrário NSTableView na seleção, objeto da notificação é o NSComboBox não o objeto do item selecionado. "Fine" Digo a mim mesmo, vou chamar o método NSComboBox:

- (id)objectValueOfSelectedItem;

Isso deve retornar o item que está selecionado e eu posso ir de lá. No entanto, esse método deve ser chamado apenas quando usesDataSource está definido para NO, o que não é o meu caso. Avisos começar a voar quando eu uso isso.

Então, minha pergunta é, qual é a maneira correta de seleções NSComboBox punho quando você estiver usando uma fonte de dados?

Foi útil?

Solução

Eu acho que você quer indexOfSelectedItem vez de objectValueOfSelectedItem. Então já que você é a fonte de dados você deve ser capaz de chamar o seu próprio método comboBox:objectValueForItemAtIndex:.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top