我应该如何传递一个int到stringWithFormat?

我尝试使用stringWithFormat设置标签的文本属性上的数值,但下面的代码不起作用。 我不能将int转换为NSString。 我期待该方法会知道如何自动将一个int转换为NSString。

我需要在这里做什么?

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

做这个:

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

请记住@“%d”只能在32位上工作。 一旦你开始使用NSInteger兼容性,如果你曾经为64位平台编译,你应该使用@“%ld”作为你的格式说明符。

Marc Charbonneau写道:

请记住@“%d”只能在32位上工作。 一旦你开始使用NSInteger兼容性,如果你曾经为64位平台编译,你应该使用@“%ld”作为你的格式说明符。

有趣的是,谢谢你的提示,我使用@“%d”与我的NSInteger

SDK文档还build议在这种情况下将NSIntegerlong (以匹配@“%ld”),例如:

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

来源: cocoastring编程指南 – string格式说明符 (需要iPhone开发者注册)

你想用整数%d%i%@用于对象。

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

 label.intValue = count; 

而对于喜剧价值:

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

(尽pipe如果有一天你正在处理NSNumber,它可能会很有用)

为了保证32位和64位的安全,请使用下面的一个盒装expression式 :

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

你只是张贴一个样本来显示你正在做什么?

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

如果你正在尝试做一些更复杂的事情 – 比如设置一个整数值并让标签显示这个值,你可以考虑使用绑定。 例如

您声明一个属性count然后您的increment操作将此值设置为任意值,然后在IB中,将标签的文本绑定到count的值。 只要您按照count关键值编码(KVC),您就不必编写任何代码来更新标签的显示。 从devise的angular度来看,你有更松散的联结。

不要忘记long long int

 long long int id = [obj.id longLongValue]; [NSString stringWithFormat:@"this is my id: %lld", id] 
 label.text = [NSString stringWithFormat:@"%d", XYZ]; //result: label.text = XYZ //use %d for int values 
 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 */