1

コンテンツ値が NSNumbers の NSArray にバインドされている NSPopUpButton があります。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

明らかに、これは、選択された値がバインドされているオブジェクトが NSNumber を期待しており、NSPopUpButton がそれに NSString を与えているために発生しています。他の投稿を見ると、必要なのは NSNumberFormatter だと思います。

ただし、Interface Builder とプログラムの両方で NSNumberFormatter を使用してみましたが、結果は変わりません。参考までに、これはプログラムで NSPopUpButton のフォーマッタを設定しようとしたときに使用したコードです。

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

[[tempoButton cell] setFormatter:tempoFormatter];

(tempoButton は NSPopUpButton に接続された IBOutlet です)

NSNumberFormatter を使用する必要があるかどうか疑問に思っていますか? もしそうなら、私は何を間違っていますか?Data Formatting Programming Guide を読みました。とても単純に思えますが、何かが欠けているように感じます。

前もって感謝します。

4

1 に答える 1

2

NSPopupButton の選択された値を取得するために使用しているバインディングによって異なります。

「選択した値」にバインドしている場合は、NSString を取得します。

「選択したオブジェクト」にバインドしている場合は、選択によって表されるオブジェクトを取得します。この場合は NSNumber になります。

それ以外の場合は、バインディングに NSValueTransformer を追加して、選択した値を期待するオブジェクトに変換します。

于 2010-01-10T20:10:52.140 に答える