我应该如何将int传递给stringWithFormat?

时间:2008-12-21 04:20:48

标签: objective-c cocoa-touch

我尝试使用stringWithFormat在标签的text属性上设置数值,但以下代码不起作用。我无法将int转换为NSString。我期待该方法知道如何自动将int转换为NSString。

我需要在这做什么?

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

10 个答案:

答案 0 :(得分:125)

这样做:

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

答案 1 :(得分:46)

请记住,@“%d”仅适用于32位。如果您编译64位平台,一旦开始使用NSInteger兼容性,您应该使用@“%ld”作为格式说明符。

答案 2 :(得分:40)

Marc Charbonneau写道:

  

请记住,@“%d”仅适用于32位。如果您编译64位平台,一旦开始使用NSInteger兼容性,您应该使用@“%ld”作为格式说明符。

有意思,感谢您的提示,我正在使用@“%d”和我的NSInteger s!

SDK文档还建议在这种情况下将NSInteger强制转换为long(以匹配@“%ld”),例如:

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

来源:String Programming Guide for Cocoa - String Format Specifiers(需要iPhone开发人员注册)

答案 3 :(得分:24)

您希望将%d%i用于整数。 %@用于对象。

值得注意的是,以下代码将完成相同的任务并且更加清晰。

label.intValue = count;

答案 4 :(得分:13)

对于喜剧的价值:

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

(虽然如果有一天你正在处理NSNumber的话可能会有用)

答案 5 :(得分:6)

要成为32位和64位安全,请使用Boxed Expressions之一:

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

答案 6 :(得分:1)

您发布的代码段只是一个样本,以显示您要执行的操作吗?

我问的原因是你已经命名了一个方法increment,但你似乎是用它来设置文本标签的值,而不是递增一个值。

如果您尝试执行更复杂的操作 - 例如设置整数值并使标签显示此值,则可以考虑使用绑定。 e.g

您声明了一个属性count,而您的increment操作会将此值设置为任意值,然后在IB中,您将标签的文本绑定到count的值。只要您使用count跟踪键值编码(KVC),就不必编写任何代码来更新标签的显示。从设计的角度来看,你有更宽松的耦合。

答案 7 :(得分:1)

不要忘记long long int

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

答案 8 :(得分:0)

label.text = [NSString stringWithFormat:@"%d", XYZ]; 

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

答案 9 :(得分: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
*/