我尝试使用stringWithFormat在标签的text属性上设置一个数值,但是以下代码不起作用。我无法将int强制转换为NSString。我期望该方法将知道如何自动将int转换为NSString。
我在这里需要做什么?
- (IBAction) increment: (id) sender
{
int count = 1;
label.text = [NSString stringWithFormat:@"%@", count];
}
Answers:
请记住,@“%d”仅适用于32位。如果您曾经针对64位平台进行编译,则一旦开始使用NSInteger以获得兼容性,就应该使用@“%ld”作为格式说明符。
%ld
编译为一个32位的设备现在时产生警告。哪种方法更安全?使用%ld
32位还是%d
64位?
long
。这样就可以了,现在可以在没有警告的情况下针对任何一个目标进行编译!
马克夏邦诺写道:
请记住,@“%d”仅适用于32位。如果您曾经针对64位平台进行编译,则一旦开始使用NSInteger以获得兼容性,就应该使用@“%ld”作为格式说明符。
有趣,感谢您的提示,我在我的NSInteger
s上使用@“%d” !
SDK文档还建议在这种情况下强制NSInteger
转换long
为(以匹配@“%ld”),例如:
NSInteger i = 42;
label.text = [NSString stringWithFormat:@"%ld", (long)i];
资料来源:可可字符串编程指南-字符串格式说明符(需要iPhone开发人员注册)
您要使用%d
或%i
表示整数。%@
用于对象。
但是,值得注意的是,以下代码将完成相同的任务,并且更加清晰。
label.intValue = count;
对于喜剧的价值:
label.text = [NSString stringWithFormat:@"%@", [NSNumber numberWithInt:count]];
(尽管如果有一天您要处理NSNumber的话可能会很有用)
为了安全起见,请使用Boxed Expressions之一:32位和64位:
label.text = [NSString stringWithFormat:@"%@", @(count).stringValue];
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
*/
int
实际上是的64位设备进行编译时,这会产生警告long
。