NSFormatter utiliza con un NSPopUpButton
-
19-09-2019 - |
Pregunta
Tengo un NSPopUpButton cuyos valores contenido son unido a un NSArray de NSNumbers. El NSPopUpButton muestra correctamente el conjunto de números en ella de campo desplegable. Sin embargo, cuando cambio el valor seleccionado, recibo un mensaje:
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, esto está ocurriendo porque el objeto al que está enlazado el valor seleccionado a espera un NSNumber, y la NSPopUpButton está dando un NSString. Mirando a través de otros mensajes, creo que lo que necesito es un NSNumberFormatter.
Sin embargo, he intentado usar un NSNumberFormatter, tanto a través de Interface Builder, y programáticamente, pero el resultado no cambia. Para referencia, este es el código que he utilizado cuando se trata de establecer el formateador de la NSPopUpButton programáticamente:
tempoFormatter = [[NSNumberFormatter alloc] init];
[tempoFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[tempoFormatter setFormat:@"### bpm"];
[[tempoButton cell] setFormatter:tempoFormatter];
(tempoButton es un IBOutlet conectado a la NSPopUpButton)
Me pregunto si se utiliza un NSNumberFormatter es aún lo que necesito? Si es así, ¿qué estoy haciendo mal? He leído a través de la Guía de programación de formato de datos; parece muy sencillo, pero siento que me falta algo.
Gracias de antemano.
Solución
Depende de la unión que está utilizando para obtener el valor seleccionado de NSPopupButton.
Si va a unirse a "valor seleccionado", que obtendrá un NSString.
Si va a unirse a "objeto seleccionado", obtendrá el objeto representado por la selección, que en su caso sería un NSNumber.
De lo contrario, deberá añadir un NSValueTransformer a su unión a transformar el valor seleccionado en el objeto que está esperando.