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 ...

dav3
quelle
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];
JonLOo
quelle
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];
rhalgravez
quelle
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];
fcoque
quelle
5

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

sbs
quelle
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];
Tibidabo
quelle
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
Singhak
quelle
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.

Gautam Sareriya
quelle