我尝试使用stringWithFormat在标签的text属性上设置数值,但以下代码不起作用。我无法将int转换为NSString。我期待该方法知道如何自动将int转换为NSString。
我需要在这做什么?
- (IBAction) increment: (id) sender
{
int count = 1;
label.text = [NSString stringWithFormat:@"%@", count];
}
答案 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
*/