6

iOS 4+; NSNumberFormatter に nil 値を渡すと、設定された nil シンボル (NSString *) が返されます。「ゼロ」シンボルでは機能しますが、nil シンボルでは機能しません。動作、グループ化など、さまざまな構成設定を試しました。

fmtr = [[NSNumberFormatter alloc] init];

[fmtr setNumberStyle:NSNumberFormatterDecimalStyle];

[fmtr setFormatterBehavior:NSNumberFormatterBehaviorDefault];

[fmtr setUsesGroupingSeparator:NO];

[fmtr setNilSymbol:@"###"];

[fmtr setZeroSymbol:@"0000"];

           
NSLog(@"[fmtr nilSymbol]=>>%@<<", [fmtr nilSymbol]);

NSLog(@"[fmtr stringFromNumber:nil]=>>%@<<  this should be '###", [fmtr stringFromNumber:nil] );

NSLog(@"[fmtr stringFromNumber:0]=>>%@<<", [fmtr stringFromNumber:[NSNumber numberWithInt:0]] );

NSLog(@"[fmtr stringFromNumber:null]=>>%@<<", [fmtr stringFromNumber:NULL] );

NSLog(@"[fmtr numberFromString:nil]=%@", [fmtr numberFromString:nil] );

NSLog(@"[fmtr numberFromString:@\"0\"]=%@", [fmtr numberFromString:@"0"] );

NSLog(@"[fmtr numberFromString:NULL]=%@", [fmtr numberFromString:NULL] );

テストの出力は次のとおりです。

[fmtr nilSymbol]=>>###<<

[fmtr stringFromNumber:nil]=>>(null)<< これは '### である必要があります

[fmtr stringFromNumber:0]=>>0000<<

[fmtr stringFromNumber:null]=>>(null)<<

[fmtr numberFromString:nil]=(null)

[fmtr numberFromString:@"0"]=0

[fmtr numberFromString:NULL]=(ヌル)

4

1 に答える 1

12

numberFromString を使用すると機能しない理由は正確にはわかりませんが、これを自分でテストしたところ、代わりに「stringForObjectValue」を使用すると機能します。(すべての「stringFromNumber」を「stringForObjectValue」に置き換えます)

編集:答えが見つかりました

このブログ: http://www.nsformatter.com/blog/2010/6/9/nsnumberformatter.html

それは言います:

  • (NSString *)stringFromNumber:(NSNumber *)番号;

これは便利な方法です。このメソッドは、number が nil の場合は nil を返し、それ以外の場合は -stringForObjectValue: を呼び出します。したがって、-nilSymbol を返さないことを除いて、-stringForObjectValue: のように動作します。

メソッドの目的のようです(nilSymbolを使用しない)

于 2011-04-26T22:50:49.843 に答える