Frage

Ich habe ein NSPopUpButton deren Inhalt Werte gebunden sind, auf eine NSArray von NSNumbers. Die NSPopUpButton zeigt korrekt die Anordnung von Zahlen in seinem Pop-up-Menü. Allerdings, wenn ich den gewählten Wert ändern, erhalte ich eine Meldung:

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

Offensichtlich ist dies auftritt, weil das Objekt, an dem der ausgewählte Wert gebunden ist, ist ein NSNumber erwartet, und die NSPopUpButton es eine NSString gibt. Beim Blick durch andere Beiträge, glaube ich, was ich brauche, ist ein NSNumberFormatter.

Allerdings habe ich versucht, eine NSNumberFormatter verwenden, sowohl durch Interface Builder und programmatisch, aber das Ergebnis nicht ändert. Als Referenz ist dies der Code, die ich verwendet habe, wenn die Formatierungs des NSPopUpButton programmatisch zu setzen versucht:

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

[[tempoButton cell] setFormatter:tempoFormatter];

(tempoButton wird ein IBOutlet zum NSPopUpButton verbunden)

Ich frage mich, ob eine NSNumberFormatter verwendet, ist auch das, was ich brauche? Wenn ja, was ich falsch mache? Ich habe durch die Datenformatierung Programming Guide lesen; es scheint sehr geradlinig, aber ich fühle mich wie ich bin etwas fehlt.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Es hängt davon ab, welche die Bindung Sie verwenden NSPopupButton des gewählten Wert zu erhalten.

Wenn Sie auf „Selected Value“ sind verbindlich, erhalten Sie eine NSString bekommen.

Wenn Sie auf „Ausgewähltes Objekt“ sind verbindlich, werden Sie das Objekt durch die Auswahl dargestellt bekommen, die in Ihrem Fall wäre eine NSNumber sein.

Ansonsten würde fügen Sie eine NSValueTransformer auf Ihre Bindung den ausgewählten Wert in das Objekt zu verwandeln Sie erwarten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top