NSNumberFormatter не возвращает nilSymbol для нулевого значения. Что мне не хватает?

iOS 4+; когда я передаю нулевое значение своему NSNumberFormatter, я хочу, чтобы взамен был установлен нулевой символ (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)

[номерFromString:@0]=0

[fmtr numberFromString:NULL]=(null)


person Vince Clortho    schedule 26.04.2011    source источник


Ответы (1)


Я точно не знаю, почему это не работает при использовании numberFromString, но я проверил это сам, и это работает, если вместо этого вы используете «stringForObjectValue». (замените все "stringFromNumber" на "stringForObjectValue")

Изменить: нашел ответ

В этом блоге: http://www.nsformatter.com/blog/2010/6/9/nsnumberformatter.html

он говорит:

  • (NSString *) stringFromNumber: (NSNumber *) число;

Это метод удобства. Этот метод возвращает nil, если число равно nil, в противном случае вызывается -stringForObjectValue:. Поэтому он ведет себя как -stringForObjectValue:, за исключением того, что он никогда не возвращает -nilSymbol

Кажется, это цель метода (не использовать nilSymbol)

person drewag    schedule 26.04.2011