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];
}
objective-c
cocoa-touch
Brennan
quelle
quelle
int
es sich tatsächlich um eine handeltlong
.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.
quelle
%ld
beim Kompilieren für ein 32-Bit-Gerät erzeugt jetzt eine Warnung. Welcher Weg ist sicherer? Verwenden%ld
mit 32 Bit oder Verwenden%d
mit 64?long
zuerst. Das macht den Trick und kompiliert jetzt für jedes Ziel ohne Vorwarnung!Marc Charbonneau schrieb:
Interessant, danke für den Tipp, ich habe @ "% d" mit meinem
NSInteger
s verwendet!Die SDK - Dokumentation empfiehlt auch zu werfen ,
NSInteger
umlong
in 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)
quelle
Sie möchten
%d
oder%i
fü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.
quelle
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)
quelle
Verwenden Sie einen der Boxed Expressions, um 32-Bit- und 64-Bit-Sicherheit zu gewährleisten :
label.text = [NSString stringWithFormat:@"%@", @(count).stringValue];
quelle
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
count
und Ihreincrement
Aktion setzt diesen Wert auf einen beliebigen Wert. Anschließend binden Sie in IB den Text der Beschriftung an den Wert voncount
. Solange Sie Key Value Coding (KVC) mit befolgencount
, müssen Sie keinen Code schreiben, um die Anzeige des Etiketts zu aktualisieren. Und aus gestalterischer Sicht haben Sie eine lockerere Kopplung.quelle
Vergiss nicht für
long long int
:long long int id = [obj.id longLongValue]; [NSString stringWithFormat:@"this is my id: %lld", id]
quelle
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 */
quelle
label.text = [NSString stringWithFormat:@"%d", XYZ]; //result: label.text = XYZ //use %d for int values
quelle