Domanda

Per la vita di me, mi viene continuamente stumped con NSComboBox.

ho creato un oggetto che è conforme al protocollo NSComboBoxDataSource, e implementato:

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

ho impostato l'istanza di mia NSComboBox di utilizzare una fonte di dati, e impostare questo oggetto come la fonte. Che le grandi opere, la mia applicazione restituisce il numero di elementi, e restituisce un valore NSString per un articolo a indici specifici.

Poi decido che voglio fare qualcosa quando si seleziona qualcosa, questo è dove iniziano i miei problemi. Non esiste un metodo evidente per ignorare nel protocollo NSComboBoxDataSource per gestire la selezione di elementi nella casella combinata.

Così, ho anche il mio oggetto conforme alle NSComboBoxDelegate e implementare:

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

Purtroppo, a differenza NSTableView sulla selezione, oggetto della comunicazione è il non NSComboBox l'oggetto della voce selezionata. "Bene" mi dico, che chiamerò il metodo NSComboBox:

- (id)objectValueOfSelectedItem;

Questo dovrebbe restituire l'articolo selezionato e posso passare da lì. Tuttavia, tale metodo deve essere chiamato solo quando usesDataSource è impostato su NO, che non è il mio caso. Avvertenze iniziano a volare quando uso questo.

Quindi, la mia domanda è, qual è il modo corretto di gestire le selezioni NSComboBox quando si utilizza una sorgente di dati?

È stato utile?

Soluzione

Penso che si desidera indexOfSelectedItem invece di objectValueOfSelectedItem. Allora visto che sei l'origine dei dati si dovrebbe essere in grado di chiamare il proprio metodo comboBox:objectValueForItemAtIndex:.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top