Domanda

Ho un NSPopUpButton i cui valori contenuti sono destinati a un NSArray di NSNumbers. Il NSPopUpButton visualizza correttamente la matrice di numeri in esso di popup-menu. Tuttavia, quando cambio il valore selezionato, ricevo un messaggio:

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

Ovviamente, questo si verifica perché l'oggetto a cui il valore selezionato è associato a si aspetta una NSNumber, e il NSPopUpButton sta dando un NSString. Guardando attraverso altri post, penso che quello che ho bisogno è un NSNumberFormatter.

Tuttavia, ho provato con un NSNumberFormatter, sia attraverso Interface Builder, e programatically, ma il risultato non cambia. Per avere un riferimento, questo è il codice che ho usato quando si tenta di impostare il formattatore del NSPopUpButton programatically:

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

[[tempoButton cell] setFormatter:tempoFormatter];

(tempoButton è un IBOutlet collegato al NSPopUpButton)

Mi chiedo se si utilizza un NSNumberFormatter è anche quello che mi serve? Se è così, che cosa sto facendo male? Ho letto attraverso la Guida di formattazione di dati di programmazione; sembra molto diretto, ma mi sento come mi manca qualcosa.

Grazie in anticipo.

È stato utile?

Soluzione

Dipende da quale legame si sta utilizzando per ottenere il valore selezionato di NSPopupButton.

Se stai legame al "valore selezionato", si otterrà un NSString.

Se stai vincolante a "Selected Object", si otterrà l'oggetto rappresentato dalla selezione, che nel tuo caso sarebbe un NSNumber.

In caso contrario, si potrebbe aggiungere un NSValueTransformer al vostro legame di trasformare il valore selezionato nell'oggetto vi aspettate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top