NSNumberFormatter没有在nil值上返回nilSymbol。我错过了什么?

时间:2011-04-26 22:19:39

标签: iphone objective-c ios nsnumberformatter

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] =&gt;&gt; ###&lt;&lt;

     

[fmtr stringFromNumber:nil] =&gt;&gt;(null)&lt;&lt;这应该是'###

     

[fmtr stringFromNumber:0] =&gt;&gt; 0000&lt;&lt;

     

[fmtr stringFromNumber:null] =&gt;&gt;(null)&lt;&lt;

     

[fmtr numberFromString:nil] =(null)

     

[fmtr numberFromString:@“0”] = 0

     

[fmtr numberFromString:NULL] =(null)

1 个答案:

答案 0 :(得分: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)