NSInteger myInt = 1804809223;
NSLog(@"%i", myInt); <==== 

上面的代码会产生一个错误:

"NSInteger"类型的值不应用作格式参数;将显式强制转换添加到"long"中

修正后的NSLog信息实际上是NSLog(@"%lg", (long) myInt);.如果我想显示myInt的整数值,为什么要将其转换为long

推荐答案

如果在OS X(64位)上编译,会收到此警告,因为在该平台上,NSInteger定义为long,是64位整数.另一方面,%i格式用于int,即32位.因此,格式和实际参数的大小不匹配.

由于NSInteger是32位或64位,这取决于平台,编译器建议

Update:由于iOS 7现在也支持64位,所以在编译时可以得到相同的警告

Objective-c相关问答推荐

反编译ARM64和理解分支目标边界

NSViewController 中的 viewDidLoad?

UIAlertController:supportedInterfaceOrientations 被递归调用

CoreData:错误:无法在 NSManagedObject 类上调用指定的初始化程序

Xcode 是否支持区域?

具有动态高度的子视图的自动布局 UIScrollView

在 iOS8 上,以横向模式显示我的应用程序会隐藏状态栏,但在 iOS 7 上,状态栏会同时显示在两个方向上

如何创建 NSIndexPath:indexPathWithIndexes:length 所需的索引:

来自 NSString 的 NSJSONSerialization

只有 ONE VIEW 横向模式

块引用作为Objective-C中的实例变量

如何删除 xcode 5 中的旧配置文件?

Objective-C - 何时使用touch

alloc 和 allocWithZone: 有什么区别?

关闭一次后如何返回允许推送通知对话框?

导航返回时重新加载 UITableView?

NSMutableArray addObject 不起作用

根据文本量更改 UITableViewCell 高度

如何更改标签栏上的非活动图标/文本 colored颜色 ?

将数据传回前一个视图控制器