NSLog给我警告不可纠正

Jac*_*son 7 xcode cocoa nslog format-specifiers

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

NSLog(@"number of items: %ld", [urlArray count]);
Run Code Online (Sandbox Code Playgroud)

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

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

NSLog(@"number of items: %u", [urlArray count]);
Run Code Online (Sandbox Code Playgroud)

我收到警告:

Format指定类型'unsigned int'但参数的类型为'NSUInteger'(又名'unsigned long')

所以我把它改成了

NSLog(@"number of items: %u", [urlArray count]);
Run Code Online (Sandbox Code Playgroud)

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

如何设置我的NSLog以便它不会生成警告?如果我遵循Xcode的建议,我只是进入一个无限循环的更改格式说明符,但警告永远不会消失.

D.C*_*.C. 14

是的,这很烦人.我相信这是一个32/64位的东西.最简单的事情就是投入很长时间:

NSLog(@"number of items: %lu", (unsigned long)[urlArray count]);
Run Code Online (Sandbox Code Playgroud)


jar*_*jar 6

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

NSLog(@"number of items: %ld", (unsigned long)[urlArray count]);
Run Code Online (Sandbox Code Playgroud)

  • 不确定它是否有所不同,但您可能应该使用与格式说明符相同的类型.所以(unsigned long)将是%lu,或者(long)将是%ld (3认同)