6

iOS 4+;当我将一个 nil 值传递给我的 NSNumberFormatter 时,我想要设置的 nil 符号 (NSString *) 作为回报。它适用于“零”符号,但不适用于零符号。我尝试了许多不同的配置设置,例如行为、分组等。

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]=(null)

4

1 回答 1

12

我不确定为什么在使用 numberFromString 时它不起作用,但我自己对此进行了测试,如果你改用“stringForObjectValue”它确实有效。(将所有“stringFromNumber”替换为“stringForObjectValue”)

编辑:找到答案

在这个博客上:http ://www.nsformatter.com/blog/2010/6/9/nsnumberformatter.html

它说:

  • (NSString *)stringFromNumber:(NSNumber *)number;

这是一种方便的方法。如果 number 为 nil,则此方法返回 nil,否则调用 -stringForObjectValue:。因此它的行为类似于 -stringForObjectValue:,除了它从不返回 -nilSymbol

这似乎是该方法的目的(不使用 nilSymbol)

于 2011-04-26T22:50:49.843 回答