NSComboBox - получение выбранной информации и NSComboBoxDataSource - PullRequest
4 голосов
/ 11 ноября 2009

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

1 Ответ

15 голосов
/ 11 ноября 2009

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

...