0

J'ai un NSPopUpButton dont les valeurs de contenu sont liées à un NSArray de NSNumbers. Le NSPopUpButton affiche correctement le tableau de nombres dans son menu contextuel. Cependant, quand je change la valeur sélectionnée, je reçois un message:NSFormatter utilisé avec un 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 

De toute évidence, ce phénomène se produit parce que l'objet auquel la valeur sélectionnée est liée à attend un NSNumber et le NSPopUpButton est lui donnant une NSString . En regardant à travers les autres posts, je pense que j'ai besoin d'un NSNumberFormatter.

Cependant, j'ai essayé d'utiliser NSNumberFormatter, à la fois via Interface Builder et par programmation, mais le résultat ne change pas. Pour référence, voici le code que je l'ai utilisé lors d'une tentative de régler le formatter du NSPopUpButton programatically:

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

[[tempoButton cell] setFormatter:tempoFormatter]; 

(tempoButton est un IBOutlet connecté au NSPopUpButton)

Je me demande si vous utilisez un NSNumberFormatter est même ce dont j'ai besoin? Si oui, qu'est-ce que je fais de mal? J'ai lu le Guide de programmation de formatage de données; Cela semble très simple, mais j'ai l'impression qu'il me manque quelque chose.

Merci d'avance.

+0

Comment obtenez-vous l'objet sélectionné? Êtes-vous lié à 'selectedObject'? – kubi

Répondre

2

Cela dépend de la liaison que vous utilisez pour obtenir la valeur sélectionnée par NSPopupButton.

Si vous liez à "Valeur sélectionnée", vous obtiendrez un NSString.

Si vous vous liez à "Objet sélectionné", vous obtiendrez l'objet représenté par la sélection, qui dans votre cas serait un numéro NSNumber.

Sinon, vous ajouteriez un NSValueTransformer à votre liaison pour transformer la valeur sélectionnée en l'objet attendu.

+0

Merci Darren, vos commentaires m'ont orienté dans la bonne direction. Je n'ai pas remarqué la différence entre Selected/Content Values ​​et Objects. Après m'être assuré que j'ai utilisé les objets au lieu des valeurs, je ne reçois plus le message d'erreur et la valeur éditée est enregistrée avec succès. Cependant, je veux formater la valeur NSNumber dans le format "### bpm" quand il est affiché dans le menu contextuel. J'ai toujours des difficultés à faire fonctionner ça; NSNumbers sont affichés juste comme ça. –

+0

CJ: Vous devriez poser une question séparée à ce sujet. –

Questions connexes