Wie soll ich ein int an stringWithFormat übergeben?

68

Ich versuche, stringWithFormat zu verwenden, um einen numerischen Wert für die Texteigenschaft eines Etiketts festzulegen, aber der folgende Code funktioniert nicht. Ich kann das int nicht in NSString umwandeln. Ich hatte erwartet, dass die Methode wissen würde, wie ein Int automatisch in NSString konvertiert wird.

Was muss ich hier tun?

- (IBAction) increment: (id) sender
{
    int count = 1;
    label.text = [NSString stringWithFormat:@"%@", count];
}
Brennan
quelle

Antworten:

128

Mach das:

label.text = [NSString stringWithFormat:@"%d", count];
BobbyShaftoe
quelle
8
Dies erzeugt eine Warnung beim Kompilieren für 64-Bit-Geräte, bei denen intes sich tatsächlich um eine handelt long.
Devios1
48

Beachten Sie, dass @ "% d" nur mit 32 Bit funktioniert. Wenn Sie NSInteger aus Kompatibilitätsgründen verwenden, falls Sie jemals für eine 64-Bit-Plattform kompilieren, sollten Sie @ "% ld" als Formatbezeichner verwenden.

Marc Charbonneau
quelle
1
Die Verwendung %ldbeim Kompilieren für ein 32-Bit-Gerät erzeugt jetzt eine Warnung. Welcher Weg ist sicherer? Verwenden %ldmit 32 Bit oder Verwenden %dmit 64?
Devios1
1
Egal, ich sehe Squelarts Notiz über das Casting longzuerst. Das macht den Trick und kompiliert jetzt für jedes Ziel ohne Vorwarnung!
Devios1
41

Marc Charbonneau schrieb:

Beachten Sie, dass @ "% d" nur mit 32 Bit funktioniert. Wenn Sie NSInteger aus Kompatibilitätsgründen verwenden, falls Sie jemals für eine 64-Bit-Plattform kompilieren, sollten Sie @ "% ld" als Formatbezeichner verwenden.

Interessant, danke für den Tipp, ich habe @ "% d" mit meinem NSIntegers verwendet!

Die SDK - Dokumentation empfiehlt auch zu werfen , NSIntegerum longin diesem Fall (die passen @ „% ld“), zB:

NSInteger i = 42;
label.text = [NSString stringWithFormat:@"%ld", (long)i];

Quelle: String Programming Guide für Cocoa - String Format Specifiers (Registrierung des iPhone-Entwicklers erforderlich)

Squelart
quelle
24

Sie möchten %doder %ifür ganze Zahlen verwenden. %@wird für Objekte verwendet.

Es ist jedoch erwähnenswert, dass der folgende Code dieselbe Aufgabe erfüllt und viel klarer ist.

label.intValue = count;
Zach Langley
quelle
13

Und für den komödiantischen Wert:

label.text = [NSString stringWithFormat:@"%@", [NSNumber numberWithInt:count]];

(Obwohl es nützlich sein könnte, wenn Sie eines Tages mit NSNumber's zu tun haben)

Squelart
quelle
3
Oder verwenden Sie die moderne Objective-C-Syntax und verwenden Sie: [NSString stringWithFormat: @ "% @", @ (count)]
Daniel Witurna
6

Verwenden Sie einen der Boxed Expressions, um 32-Bit- und 64-Bit-Sicherheit zu gewährleisten :

  label.text = [NSString stringWithFormat:@"%@", @(count).stringValue];
Oh ho
quelle
1

Ist das von Ihnen veröffentlichte Snippet nur ein Beispiel, um zu zeigen, was Sie versuchen zu tun?

Der Grund, den ich frage, ist, dass Sie eine Methode benannt haben increment, aber Sie scheinen diese zu verwenden, um den Wert einer Textbeschriftung festzulegen, anstatt einen Wert zu erhöhen.

Wenn Sie versuchen, etwas Komplizierteres zu tun, z. B. einen ganzzahligen Wert festzulegen und die Beschriftung diesen Wert anzeigen zu lassen, können Sie Bindungen verwenden. z.B

Sie deklarieren eine Eigenschaft countund Ihre incrementAktion setzt diesen Wert auf einen beliebigen Wert. Anschließend binden Sie in IB den Text der Beschriftung an den Wert von count. Solange Sie Key Value Coding (KVC) mit befolgen count, müssen Sie keinen Code schreiben, um die Anzeige des Etiketts zu aktualisieren. Und aus gestalterischer Sicht haben Sie eine lockerere Kopplung.

Abizern
quelle
1

Vergiss nicht für long long int:

long long int id = [obj.id longLongValue];
[NSString stringWithFormat:@"this is my id: %lld", id]
Craig Bruce
quelle
1
NSString * formattedname;
NSString * firstname;
NSString * middlename;
NSString * lastname;

firstname = @"My First Name";
middlename = @"My Middle Name";
lastname = @"My Last Name";

formattedname = [NSString stringWithFormat:@"My Full Name: %@ %@ %@", firstname, middlename, lastname];
NSLog(@"\n\nHere is the Formatted Name:\n%@\n\n", formattedname);

/*
Result:
Here is the Formatted Name:
My Full Name: My First Name My Middle Name My Last Name
*/
Aruna
quelle
0
label.text = [NSString stringWithFormat:@"%d", XYZ]; 

//result:   label.text = XYZ
//use %d for int values
Rodrigo Carrapeiro
quelle