Pergunta

Eu tenho um NSPopupButton cujos valores de conteúdo são obrigados a um NSArray de NSNumbers. O NSPopupButton exibe corretamente a matriz de números nele do menu pop-up. No entanto, quando eu alterar o valor selecionado, recebo uma mensagem:

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

Obviamente, isto ocorre porque o objecto para o qual o valor seleccionado é ligado a uma espera NSNumber, e o NSPopupButton é dando-lhe um NSString. Olhando através de outros lugares, eu acho que o que eu preciso é um NSNumberFormatter.

No entanto, eu tentei usar um NSNumberFormatter, tanto através da Interface Builder, e programaticamente, mas o resultado não muda. Para referência, este é o código que eu tenho usado ao tentar definir o formatador do NSPopupButton programaticamente:

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

[[tempoButton cell] setFormatter:tempoFormatter];

(tempoButton é um IBOutlet ligado ao NSPopupButton)

Eu estou querendo saber se estiver usando um NSNumberFormatter é mesmo o que eu preciso? Se assim for, o que estou fazendo de errado? Eu li através da formatação de dados Guia de Programação; parece muito simples e direta, mas eu sinto que eu estou faltando alguma coisa.

Agradecemos antecipadamente.

Foi útil?

Solução

Depende de qual a ligação que você está usando para obter o valor selecionado de NSPopupButton.

Se você está ligação ao "valor selecionado", você vai ter um NSString.

Se você está ligação ao "objeto selecionado", você vai ter o objeto representado pela seleção, que no seu caso seria uma NSNumber.

Caso contrário, você gostaria de acrescentar um NSValueTransformer à sua ligação para transformar o valor selecionado para o objeto que você está esperando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top