NSNumberFormatter не возвращает nilSymbol для значения nil.Что мне не хватает? - PullRequest
6 голосов
/ 27 апреля 2011

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] = >> ### << </p>

[fmtr stringFromNumber: nil] = >> (null) << это должно быть '### </p>

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

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

[fmtr numberFromString: nil] = (ноль)

[fmtr numberFromString: @ "0"] = 0

[fmtr numberFromString: NULL] = (ноль)

1 Ответ

12 голосов
/ 27 апреля 2011

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

Редактировать: Найдено ответ

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

там написано:

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

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

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

...