2008-12-21 43 views
61

我嘗試使用stringWithFormat在標籤的文本屬性上設置一個數值,但下面的代碼不起作用。我不能將int轉換爲NSString。我期待該方法知道如何自動將int轉換爲NSString。我應該如何將int傳入stringWithFormat?

我需要在這裏做什麼?

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

回答

122

這樣做:

label.text = [NSString stringWithFormat:@"%d", count]; 
+8

這將產生一個編譯64位設備時發出警告,其中`int`實際上是一個`long'。 – devios1 2015-01-23 23:14:24

24

你想用%d%i爲整數。 %@用於對象。

但值得注意的是,下面的代碼將完成相同的任務,並且更清晰。

label.intValue = count; 
45

請記住@「%d」只能在32位上工作。一旦你開始使用NSInteger兼容性,如果你曾經爲64位平臺編譯過,你應該使用@「%ld」作爲你的格式說明符。

+1

編譯32位設備時使用`%ld`現在會產生警告。哪種方法更安全?在32位中使用`%ld`或在64中使用`%d`? – devios1 2015-01-23 23:15:08

+1

沒關係,我看到squelart關於首先鑄造「長」的說明。這就是訣竅,現在可以在沒有警告的情況下爲任一目標編譯! – devios1 2015-01-23 23:20:26

13

而對於喜劇值:

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

37

馬克·博諾寫道(不過,如果有一天,你正在使用的NSNumber的處理也可能是有用的):

請記住, @「%d」只能在32位上工作。一旦你開始使用NSInteger兼容性,如果你曾經爲64位平臺編譯過,你應該使用@「%ld」作爲格式說明符。

有趣的是,感謝您的提示,我在使用@「%d」和我的NSInteger s!

SDK文檔還建議投NSIntegerlong在這種情況下(到@ 「%LD」 匹配),例如:

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

來源:String Programming Guide for Cocoa - String Format Specifiers(需要iPhone開發者註冊)

1

您張貼的片段只是一個示例,以顯示您正在嘗試做什麼?

我問的原因是你已經命名了一個方法increment,但你似乎使用它來設置文本標籤的值,而不是增加一個值。

如果您想要做更復雜的事情 - 比如設置一個整數值並讓標籤顯示這個值,您可以考慮使用綁定。例如

您聲明屬性count並且您的increment操作將此值設置爲任意值,然後在IB中將標籤的文本綁定到值count。只要您按照關鍵值編碼(KVC)與count,您不必編寫任何代碼來更新標籤的顯示。從設計角度來看,你有更寬鬆的耦合。

1

不要忘記爲long long int

long long int id = [obj.id longLongValue]; 
[NSString stringWithFormat:@"this is my id: %lld", id] 
0
label.text = [NSString stringWithFormat:@"%d", XYZ]; 

//result: label.text = XYZ 
//use %d for int values 
4

爲32位和64位的安全,使用Boxed Expressions之一:

label.text = [NSString stringWithFormat:@"%@", @(count).stringValue]; 
0
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 
*/ 
相關問題