2011-04-26 102 views
6

iOS 4+;当我将一个零值传递给我的NSNumberFormatter时,我想返回设置的NIL符号(NSString *)。它适用于'零'符号,但不适用于零符号。我已经试过样行为,分组等许多不同的配置设置NSNumberFormatter不会在nil值上返回nilSymbol。我错过了什么?

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:无] = >>(空)< <这应该是“###

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

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

[fmtr numberFromString:无] =(空)

[fmtr numberFromString:@ “0”] = 0

[fmtr numberFromString:NULL] =(空)

回答

12

我不知道到底为什么它不能正常工作使用numberFromString的时候,但我测试了自己,它的工作,如果你使用“STRI而不是“ngForObjectValue”。

编辑(用 “stringForObjectValue” 全部替换 “stringFromNumber”):找到了答案

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

它说:

  • (的NSString *)stringFromNumber: (NSNumber *)号码;

这是一种方便的方法。如果number为零,则此 方法返回nil,否则将调用 -stringForObjectValue :.因此,它的行为就像-stringForObjectValue :, 除了它永远不会返回 -nilSymbol

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

相关问题