Come convertire NSNumber in NSString


132

Quindi ho un NSArray"myArray" con NSNumbers e NSStrings. Ne ho bisogno in un altro, UIViewquindi vado in questo modo:

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

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

Il soggetto funziona. Ma come posso farne NSNumberuscire? (In realtà ho bisogno di loro come stringhe ...) vorrei convertire un NSStringfuori di una NSNumbercome questo: NSString *blah = [NSNumber intValue]. Ma non so come configurarlo nel codice sopra ...


Il tuo array sembra effettivamente contenere dizionari, a giudicare dall'uso di objectForKey. Quindi dovrai estrarre i valori appropriati da quello prima di provare a convertire. Nota che la maggior parte dei tipi di oggetti Cocoa, incluso NSNumber, può essere convertita in stringhe chiamando il descriptionmetodo (o usando %@una stringa di formato).
walkytalky,

wow .. grazie walkytalky! puoi indicarmi una documentazione o fornire un codice di esempio per comprenderla? =)
dav3

Risposte:


380

Provare:

NSString *myString = [NSNumber stringValue];

3
ma dovresti prendere il NSNumber che si trova all'interno dell'array e quindi chiamare il metodo StringValue, qualcosa come NSString * myString = [[myArray objectAtIndex: i] stringValue]; ma devi essere sicuro di avere un NSNumber in quell'indice
JonLOo,

Preferisco descriptionWithLocale: [NSLocale currentLocale] perché funziona sia per ints che per float.
just.do.it

@JonLOo quando si utilizza questo per un numero specifico, i valori decimali perdono valori esatti. Ad esempio: NSNumber * num = [NSNumber numberWithDouble: 48.3]; NSString * strNumber = num.stringValue; fornisce risultati come 48.299999; questo diventa fondamentale se il suo importo e deve fare i conti nel mondo reale e moltiplicato per grandi numeri. !! Qualche pensiero?
Vish,

ciao @Vish, non ho provato questa soluzione quindi non sono sicuro che funzionerà, prova a formattarla in %fquesto modo: [NSString stringWithFormat:@"%f", yourDouble];
JonLOo

"Nessun metodo di classe noto per il selettore 'stringValue'" <- stringValue non è una funzione di classe, quindi non è possibile chiamarlo direttamente su NSNumber. la risposta di rhalgravez lo fa correttamente.
user1021430,

13

Puoi farlo con:

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

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

5

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


8
Questo fa due conversioni. Uno per trasformare NSNumber in intValue e uno per forzare l'intValue risultante in una stringa NSS. L'uso di questo può essere piccolo per alcuni, ma rimuoverlo è un ottimo modo per salvare piccoli cicli computazionali ... che possono sommarsi.
Jann

Ciò presuppone che i numeri memorizzati siano ints. Cosa succede se non si conosce il tipo di numero memorizzato?
James Webster,

3

La cosa divertente è che NSNumber si converte automaticamente in stringa se diventa parte di una stringa. Non credo sia documentato. Prova questi:

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

Stampa:

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

Funziona su Mac e iOS

Questo non funziona:

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

2
Questo è documentato: l' %@identificatore di formato invierà il -descriptionmessaggio al corrispondente oggetto destinatario. Si può fare il vostro ultimo lavoro linea con lo stesso spirito scrivendo: NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];. Per quanto posso dire, NSNumberl' descriptione stringValuemetodi di fare la stessa cosa.
Jean-Denis Muys,

2

In Swift puoi fare così

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

2

In Swift 3.0

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

Possiamo ottenere il valore numerico in String.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.