不能再使用array.count了

时间:2014-05-07 13:50:05

标签: objective-c cocoa nsarray

现在,当我尝试使用带有%d的self.array.count尝试nslog我的数组计数时,我收到此消息L:类型为“NSUInteget”的值不应该用作格式argumments并且它建议我修复它%lu而不是。这是在任何地方记录的吗?

2 个答案:

答案 0 :(得分:1)

NSArray' count方法返回NSUIntegerdocumented。如果您使用的是64位环境,那么documented也需要格式%lu

如果您使用的是签名NSInteger,则需要在64位环境中使用%ld,或在32位环境中使用%d

答案 1 :(得分:0)

您现在可能正在看到该消息,因为您已更新了编译器,Xcode正在进行更多检查并发出更多警告。

此处的问题是NSUInteger(和NSInteger)的大小在不同平台上有所不同。而不是添加新的格式说明符来处理这个Apple,而是选择建议使用最大可能类型的格式说明符一个强制转换。所以:

  1. 对于NSUInteger,请使用格式说明符%lu并将值转换为unsigned long;和
  2. 对于NSInteger,请使用格式说明符%ld并将值转换为long
  3. 这样做可以在32位和64位平台上产生正确的结果。

    请参阅String Format Specifiers中的平台依赖关系