以下是我在《荣耀》中的代码:

[NSString stringWithFormat:@"Total Properties: %d", (int)[inArray count]];

这给了我一个Xcode 5.1警告:

Values of type 'NSUInteger' should not be used as format arguments; add an explicit cast to 'unsigned long' instead

好吧,我很困惑.这个值实际上是一个32位的int,我将它转换为32位的int.那么它抱怨的是什么(我假设的计数),为什么这个转换不能修复它?

推荐答案

NSInteger和NSInteger在32位(int)和64位(long)上的长度不同.为了使one格式说明符适用于both种体系 struct ,必须使用long说明符并将值强制转换为long:

Type    Format Specifier    Cast
----    ----------------    ----
NSInteger    %ld            long
NSUInteger   %lu            unsigned long

例如,你的代码变成:

[NSString stringWithFormat:@"Total Properties: %lu", (unsigned long)[inArray count]];

实际上,要做的工作很少,因为Xcode的修复功能会自动为您完成这项工作.

Objective-c相关问答推荐

恢复 iOS7 之前的 UINavigationController pushViewController 动画

如何在情节提要中为视图控制器提供标识符?

多个 WKWebView 之间的 Cookie 共享

在 Objective C 中将属性标记为已弃用

如何在旋转时定义 CollectionView 的大小

常量的 k 前缀从何而来?

如何在使用 React Native 时实现 SSL 证书固定

反编译 Objective-C 库

如何从 Xcode4 生成 UML 图

iOS:使用设备修饰符加载 xib 文件?

未知类型名称类;您指的是 'Class' 吗?

NSSet 到 NSArray 转换调用 objectAtIndex?

UIWebView didFinishLoading 多次触发

UILabel 根据要显示的文本自动调整大小

UIScrollView - 显示滚动条

对 NSTimer 目标的弱引用以防止保留循环

Objective-C构建中的重复符号错误?

iOS:开源 VoIP/SIP Objective-C 代码

将参数传递给由 NSTimer 调用的方法

@synthesized 保留属性的释放是如何处理的?