现在,当我尝试使用带有%d的self.array.count尝试nslog我的数组计数时,我收到此消息L:类型为“NSUInteget”的值不应该用作格式argumments并且它建议我修复它%lu而不是。这是在任何地方记录的吗?
答案 0 :(得分:1)
NSArray
' count
方法返回NSUInteger
,documented。如果您使用的是64位环境,那么documented也需要格式%lu
。
如果您使用的是签名NSInteger
,则需要在64位环境中使用%ld
,或在32位环境中使用%d
。
答案 1 :(得分:0)
您现在可能正在看到该消息,因为您已更新了编译器,Xcode正在进行更多检查并发出更多警告。
此处的问题是NSUInteger
(和NSInteger
)的大小在不同平台上有所不同。而不是添加新的格式说明符来处理这个Apple,而是选择建议使用最大可能类型的格式说明符和一个强制转换。所以:
NSUInteger
,请使用格式说明符%lu
并将值转换为unsigned long
;和NSInteger
,请使用格式说明符%ld
并将值转换为long
。这样做可以在32位和64位平台上产生正确的结果。
请参阅String Format Specifiers中的平台依赖关系。