На всю жизнь меня постоянно ставит в тупик 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
при использовании источника данных?