2010-10-19 12 views
115

So habe ich eine NSArray "myArray" mit NSNumber s und NSString s. Ich brauche sie in einer anderen UIView so ich so gehen:Wie konvertiert man NSNumber in NSString

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

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

Die Subject funktioniert. Aber wie kann ich die NSNumber s aus ihm heraus? (Ich brauche sie eigentlich als Strings ...) ich NSString aus einem NSNumber wie folgt umwandeln würde: NSString *blah = [NSNumber intValue]. Aber ich weiß nicht, wie es oben im Code einzurichten ...

+0

Ihr Array scheint tatsächlich Wörterbücher zu enthalten, durch die Verwendung von 'objectForKey' beurteilen. Sie müssen daher die entsprechenden Werte daraus extrahieren, bevor Sie versuchen, sie zu konvertieren. Beachten Sie, dass die meisten Cocoa Objekttypen, einschließlich NSNumber, kann durch den Aufruf der 'description' Methode (oder mit'% @ 'in einem Format-String) in Strings konvertiert werden. – walkytalky

+0

wow .. danke Walkytalky! Kannst du mich auf eine Dokumentation hinweisen oder einen Beispielcode geben, um es zu verstehen? =) – dav3

+0

danke, arbeitete. – dav3

Antwort

341

Versuchen:

NSString *myString = [NSNumber stringValue]; 
+0

danke, aber ich habe ein Array und das nicht auf stringValue .. – dav3

+3

reagiert, aber Sie sollten die NSNumber, die im Array ist und dann StringValue-Methode, etwas wie NSString * myString = [[myArray objectAtIndex: i] stringValue]; aber Sie müssen sicher sein, dass Sie eine NSNumber bei diesem Index haben – JonLOo

+0

Ich bevorzuge descriptionWithLocale: [NSLocale currentLocale], weil es sowohl für Ints und Floats funktioniert. –

5

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

+7

Dies führt zu zwei Konvertierungen. Eins, um NSNumber in intValue umzuwandeln, und eins, um den resultierenden intValue in einen NSString umzuwandeln. Dies kann für einige etwas klein sein, aber das Entfernen ist eine großartige Möglichkeit, kleine Rechenzyklen zu sparen ... die sich addieren können. – Jann

+0

Dies setzt voraus, dass die gespeicherten Nummern Intels sind. Was, wenn Sie die Art der gespeicherten Nummer nicht kennen? –

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

Sie können es mit:

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

Das Komische ist, dass NSNumber in String konvertiert automatisch, wenn es ein Teil einer Zeichenkette wird. Ich denke nicht, dass es dokumentiert ist. Versuchen Sie 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 druckt:

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 

Arbeiten auf Mac und iOS

Dieses funktioniert nicht:

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

Dies ist dokumentiert: Der Formatbezeichner '% @' sendet die Nachricht '-description' an das entsprechende Empfängerobjekt. Du kannst deine letzte Zeile im gleichen Sinne arbeiten lassen, indem du schreibst: 'NSString * myNSNumber2 = [[NSNummer numberWithFloat: -34512.23f] description];'. Soweit ich das beurteilen kann, machen die 'description' und' stringValue' Methoden von 'NSNumber' dasselbe. –

2

In Swift können Sie tun wie diese

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

können wir den Zahlenwert in String erhalten.

Verwandte Themen