NSComboBox - Obtenção de informações selecionadas e NSComboBoxDataSource
-
19-09-2019 - |
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?
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:
.