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