NSComboBox — получение выбранной информации и NSComboBoxDataSource

На всю жизнь меня постоянно ставит в тупик NSComboBox.

Я создал объект, соответствующий протоколу NSComboBoxDataSource, и реализовал:

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

Я установил экземпляр моего NSComboBox для использования источника данных и установил этот объект в качестве источника. Это прекрасно работает, моя реализация возвращает количество элементов и возвращает значение NSString для элемента по определенным индексам.

Потом я решаю, что хочу что-то сделать, когда что-то выбрано, вот тут и начинаются мои проблемы. В протоколе NSComboBoxDataSource нет очевидного метода переопределения для обработки выбора элементов в поле со списком.

Итак, мой объект также соответствует NSComboBoxDelegate и реализует:

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

К сожалению, в отличие от NSTableView при выборе, объект уведомления NSComboBox не является объектом выбранного элемента. «Отлично», говорю я себе, я вызову метод NSComboBox:

- (id)objectValueOfSelectedItem;

Это должно вернуть выбранный элемент, и я могу перейти оттуда. Однако этот метод следует вызывать ТОЛЬКО тогда, когда для usesDataSource установлено значение NO, что не является моим случаем. Предупреждения начинают летать, когда я использую это.

Итак, мой вопрос: как правильно обрабатывать выборки NSComboBox при использовании источника данных?


person MarkPowell    schedule 11.11.2009    source источник


Ответы (1)


Я думаю, вам нужен indexOfSelectedItem вместо objectValueOfSelectedItem. Затем, поскольку вы являетесь источником данных, вы должны иметь возможность вызывать свой собственный метод comboBox:objectValueForItemAtIndex:.

person nall    schedule 11.11.2009