So konvertieren Sie NSNumber in NSString


132

Also habe ich ein NSArray"myArray" mit NSNumbers und NSStrings. Ich brauche sie in einem anderen, UIViewalso gehe ich so:

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

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

Der subjectText funktioniert. Aber wie kann ich das NSNumberrausholen? (Ich brauche sie tatsächlich als Zeichenfolgen ...) Ich würde eine NSStringaus einer solchen konvertieren NSNumber: NSString *blah = [NSNumber intValue]. Aber ich weiß nicht, wie ich es im obigen Code einrichten soll ...


Ihr Array scheint tatsächlich Wörterbücher zu enthalten, gemessen an der Verwendung von objectForKey. Sie müssen also die entsprechenden Werte daraus extrahieren, bevor Sie versuchen, sie zu konvertieren. Beachten Sie, dass die meisten Cocoa-Objekttypen, einschließlich NSNumber, durch Aufrufen der descriptionMethode (oder Verwendung %@in einer Formatzeichenfolge) in Zeichenfolgen konvertiert werden können .
Walkytalky

wow .. danke walkytalky! Können Sie mich auf eine Dokumentation verweisen oder einen Beispielcode angeben, um sie zu verstehen? =)
Dav3

Antworten:


380

Versuchen:

NSString *myString = [NSNumber stringValue];

3
Sie sollten jedoch die NSNumber nehmen, die sich im Array befindet, und dann die StringValue-Methode aufrufen, etwa NSString * myString = [[myArray objectAtIndex: i] stringValue]; Aber Sie müssen sicher sein, dass Sie eine NS-Nummer in diesem Index haben
JonLOo

Ich bevorzuge descriptionWithLocale: [NSLocale currentLocale], da es sowohl für Ints als auch für Floats funktioniert.
just.do.it

@JonLOo Wenn Sie dies für eine bestimmte Zahl verwenden, verlieren die Dezimalwerte exakte Werte. Zum Beispiel: NSNumber * num = [NSNumber numberWithDouble: 48.3]; NSString * strNumber = num.stringValue; ergibt Ergebnisse als 48.299999; Dies wird kritisch, wenn sein Betrag und muss in der realen Welt behandelt und mit großen Zahlen multipliziert werden. !! Jeder Gedanke?
Vish

Hallo @Vish, ich habe diese Lösung nicht ausprobiert, daher bin ich mir nicht sicher, ob sie funktionieren wird. Versuchen Sie, sie folgendermaßen zu formatieren %f: [NSString stringWithFormat:@"%f", yourDouble];
JonLOo

"Keine bekannte Klassenmethode für den Selektor 'stringValue'" <- stringValue ist keine Klassenfunktion, daher können Sie sie nicht direkt in NSNumber aufrufen. Rhalgravez 'Antwort macht es richtig.
user1021430

13

Sie können es tun mit:

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

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


8
Dies führt zwei Konvertierungen durch. Eine, um NSNumber in intValue umzuwandeln, und eine, um den resultierenden intValue in einen NSString zu zwingen. Dies zu verwenden mag für manche klein sein, aber das Entfernen ist eine großartige Möglichkeit, kleine Rechenzyklen zu sparen ... was sich summieren kann.
Jann

Dies setzt voraus, dass die gespeicherten Zahlen Ints sind. Was ist, wenn Sie die Art der gespeicherten Nummer nicht kennen?
James Webster

3

Das Lustige ist, dass NSNumber automatisch in einen String konvertiert, wenn dieser Teil eines Strings wird. Ich denke nicht, dass es dokumentiert ist. Probiere diese:

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

Es wird gedruckt:

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

Funktioniert sowohl auf Mac als auch auf iOS

Dieser funktioniert nicht:

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

2
Dies ist dokumentiert: Der %@Formatbezeichner sendet die -descriptionNachricht an das entsprechende Empfängerobjekt. Sie können Ihre letzte Zeile im gleichen Sinne arbeiten lassen, indem Sie Folgendes schreiben : NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];. Soweit ich das beurteilen kann NSNumber, machen s descriptionund stringValueMethoden dasselbe.
Jean-Denis Muys

2

In Swift können Sie dies tun

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

Wir können den Zahlenwert in String erhalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.