Вопрос

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

Заранее благодарю.

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top