NSFormatter, используемый с NSPopUpButton

У меня есть NSPopUpButton, значения содержимого которого привязаны к NSArray NSNumbers. NSPopUpButton правильно отображает массив чисел во всплывающем меню. Однако, когда я изменяю выбранное значение, я получаю сообщение:

HIToolbox: ignoring exception 'Unacceptable type of value for attribute: property = "tempo"; desired type = NSNumber; given type = NSCFString; value = 106.' that raised inside Carbon event dispatch

Очевидно, это происходит потому, что объект, к которому привязано выбранное значение, ожидает NSNumber, а NSPopUpButton дает ему NSString. Просматривая другие сообщения, я думаю, что мне нужен NSNumberFormatter.

Однако я попытался использовать NSNumberFormatter как через Interface Builder, так и программно, но результат не изменился. Для справки, это код, который я использовал при попытке программно установить средство форматирования NSPopUpButton:

tempoFormatter = [[NSNumberFormatter alloc] init];
[tempoFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[tempoFormatter setFormat:@"### bpm"];

[[tempoButton cell] setFormatter:tempoFormatter];

(tempoButton - это IBOutlet, подключенный к NSPopUpButton)

Мне интересно, нужно ли мне использовать NSNumberFormatter? Если да, то что я делаю не так? Я прочитал Руководство по программированию форматирования данных; это кажется очень простым, но я чувствую, что что-то упускаю.

Заранее спасибо.


person CJ.    schedule 10.01.2010    source источник
comment
Как у вас получается выбранный объект? Вы привязываетесь к selectedObject?   -  person kubi    schedule 10.01.2010


Ответы (1)


Это зависит от того, какую привязку вы используете для получения выбранного значения NSPopupButton.

Если вы привязываетесь к «выбранному значению», вы получите NSString.

Если вы привязываетесь к «Выбранному объекту», вы получите объект, представленный выделением, которым в вашем случае будет NSNumber.

В противном случае вы бы добавили NSValueTransformer в свою привязку, чтобы преобразовать выбранное значение в ожидаемый объект.

person Darren    schedule 10.01.2010
comment
Спасибо, Даррен, твои комментарии указали мне правильное направление. Я не заметил разницы между значениями Selected / Content и объектами. Убедившись, что я использовал объекты вместо значений, я больше не получаю сообщение об ошибке, и отредактированное значение успешно сохраняется. Однако я хочу отформатировать значение NSNumber в формате ### bpm, когда оно отображается во всплывающем меню. Мне все еще трудно заставить это работать; NSNumbers отображаются именно так. - person CJ.; 11.01.2010
comment
КД: Вы должны задать об этом отдельный вопрос. - person Peter Hosey; 11.01.2010