7

我的 Mac OS X 应用程序中有以下代码行:

NSLog(@"number of items: %ld", [urlArray count]);

我收到警告:“格式指定类型'long',但参数的类型为'NSUInteger'(又名'unsigned int')”

但是,如果我将代码更改为:

NSLog(@"number of items: %u", [urlArray count]);

我收到警告:

格式指定类型“unsigned int”,但参数的类型为“NSUInteger”(又名“unsigned long”)

所以我把它改成

NSLog(@"number of items: %u", [urlArray count]);

但我收到警告:格式指定类型“无符号长”但参数类型为“NSUInteger”(又名“无符号整数”)

如何设置我的 NSLog 使其不产生警告?如果我遵循 Xcode 的建议,我只会陷入更改格式说明符的无限循环,但警告永远不会消失。

4

3 回答 3

14

是的,这很烦人。我相信这是一个 32/64 位的东西。最简单的方法就是将其转换为 long:

NSLog(@"number of items: %lu", (unsigned long)[urlArray count]);
于 2012-11-13T06:32:20.280 回答
6

通用应用程序的可移植性指南建议在这种情况下进行转换。

NSLog(@"number of items: %ld", (unsigned long)[urlArray count]);
于 2012-11-13T06:32:26.223 回答
2

这里提到了另一个选项:NSInteger and NSUInteger in a mixed 64bit / 32bit environment

NSLog(@"Number is %@", @(number));
于 2014-04-28T19:19:21.080 回答