NSFormatter используется с NSPopUpButton - PullRequest
1 голос
/ 10 января 2010

У меня есть 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 - это вообще то, что мне нужно? Если так, что я делаю не так? Я прочитал Руководство по программированию форматирования данных; это кажется очень простым, но я чувствую, что что-то упустил.

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

1 Ответ

2 голосов
/ 10 января 2010

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

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

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

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

...