2011-04-26 14 views
6

iOS 4+; cuando paso un valor nulo a mi NSNumberFormatter, quiero el nil símbolo que se estableció (NSString *) a cambio. Funciona para el símbolo 'cero', pero no para el símbolo nulo. He probado muchos ajustes de configuración diferentes, como comportamiento, agrupación, etc.NSNumberFormatter no devuelve nilSymbol on nil value. ¿Qué me estoy perdiendo?

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]); 

Aquí está la salida de la prueba:

[FMTR nilSymbol] = ### >> < <

[FMTR stringFromNumber: nil] = >> (null) < < esto debería ser '###

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

[FMTR stringFromNumber: null] = >> (null) < <

[FMTR numberFromString: nil] = (null)

[FMTR numberFromString: @ "0"] = 0

[FMTR numberFromString: NULL] = (null)

Respuesta

12

no estoy seguro exactamente por qué no funciona cuando se utiliza numberFromString, pero he probado esto por mí mismo, y funciona si se utiliza "stri ngForObjectValue "en su lugar. (Sustituir todos "stringFromNumber" con "stringForObjectValue")

Editar: Se encuentra la respuesta

En este blog: http://www.nsformatter.com/blog/2010/6/9/nsnumberformatter.html

que dice:

  • (NSString *) stringFromNumber: (NSNumber *) número;

Este es un método de conveniencia. Este método devuelve nil, si el número es nulo, de lo contrario llama a -stringForObjectValue :. Por lo tanto se comporta como -stringForObjectValue :, excepto que nunca se devuelve el -nilSymbol

Parece que es el propósito del método (no utilizar el nilSymbol)

Cuestiones relacionadas