2010-10-19 24 views
115

Entonces tengo un NSArray "myArray" con NSNumber sy NSString s. Los necesito en otro UIView así que algo así:Cómo convertir NSNumber a NSString

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

DetailViewController *details = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil]; 
details.subjectText = [[myArray objectAtIndex:indexPath.row] objectForKey:@"subject"]; 

El subjectText obras. Pero, ¿cómo puedo obtener el NSNumber s fuera de él? (Realmente los necesito como cadenas ...) Convertiría un NSString de un NSNumber así: NSString *blah = [NSNumber intValue]. Pero no sé cómo configurarlo en el código anterior ...

+0

Parece que su matriz contiene diccionarios, a juzgar por el uso de 'objectForKey'. Por lo tanto, deberá extraer los valores apropiados antes de intentar la conversión. Tenga en cuenta que la mayoría de los tipos de objetos de Cocoa, incluido NSNumber, se pueden convertir en cadenas llamando al método 'description' (o usando'% @ 'en una cadena de formato). – walkytalky

+0

guau .. gracias walkytalky! ¿me puede indicar una documentación o dar un código de ejemplo para comprenderlo? =) – dav3

+0

gracias, trabajado. – dav3

Respuesta

341

Probar:

NSString *myString = [NSNumber stringValue]; 
+0

gracias, pero tengo una matriz y eso no responde a stringValue .. – dav3

+3

pero debe tomar el NSNumber que está dentro de la matriz y luego llamar al método StringValue, algo así como NSString * myString = [[myArray objectAtIndex: i] valor de cadena]; pero debe asegurarse de tener un NSNumber en ese índice – JonLOo

+0

Prefiero descriptionWithLocale: [NSLocale currentLocale] porque funciona tanto para ints como para flotantes. –

5

o tratar NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];

+7

Esto hace dos conversiones. Uno para convertir NSNumber en intValue y otro para forzar el intValue resultante en un NSString. Usar esto puede ser pequeño para algunos, pero eliminarlo es una gran manera de ahorrar pequeños ciclos computacionales ... que pueden sumar. – Jann

+0

Esto supone que los números que se almacenan son enteros. ¿Qué pasa si no sabes el tipo de número almacenado? –

7
//An example of implementation : 
// we set the score of one player to a value 
[Game getCurrent].scorePlayer1 = [NSNumber numberWithInteger:1]; 
// We copy the value in a NSNumber 
NSNumber *aNumber = [Game getCurrent].scorePlayer1; 
// Conversion of the NSNumber aNumber to a String with stringValue 
NSString *StringScorePlayer1 = [aNumber stringValue]; 
11

Puede hacerlo con:

NSNumber *myNumber = @15; 
NSString *myNumberInString = [myNumber stringValue]; 
2

Lo curioso es que NSNumber convierte en cadena automáticamente si se convierte en parte de una cadena. No creo que esté documentado. Prueba estas:

NSLog(@"My integer NSNumber:%@",[NSNumber numberWithInt:184]); 
NSLog(@"My float NSNumber:%@",[NSNumber numberWithFloat:12.23f]); 
NSLog(@"My bool(YES) NSNumber:%@",[NSNumber numberWithBool:YES]); 
NSLog(@"My bool(NO) NSNumber:%@",[NSNumber numberWithBool:NO]); 

NSString *myStringWithNumbers = [NSString stringWithFormat:@"Int:%@, Float:%@ Bool:%@",[NSNumber numberWithInt:132],[NSNumber numberWithFloat:-4.823f],[NSNumber numberWithBool:YES]]; 
NSLog(@"%@",myStringWithNumbers); 

Se imprimirá:

My integer NSNumber:184 
My float NSNumber:12.23 
My bool(YES) NSNumber:1 
My bool(NO) NSNumber:0 
Int:132, Float:-4.823 Bool:1 

funciona tanto en Mac y iOS

Ésta no funciona:

NSString *myNSNumber2 = [NSNumber numberWithFloat:-34512.23f]; 
+2

Esto está documentado: el especificador de formato '% @' enviará el mensaje '-description' al objeto receptor correspondiente. Puede hacer que su última línea funcione con el mismo espíritu escribiendo: 'NSString * myNSNumber2 = [[NSNumber numberWithFloat: -34512.23f] description];'. Por lo que puedo decir, los métodos 'description' y' stringValue' de 'NSNumber' hacen lo mismo. –

2

En Swift se puede hacer como este

let number : NSNumber = 95 
let str : String = number.stringValue 
2

En Swift 3,0

let number:NSNumber = 25 
let strValue = String(describing: number as NSNumber) 
print("As String => \(strValue)") 

podemos obtener el valor del número de cuerdas.