由于某种原因,当我尝试进行以下操作时,会出现编译错误:
NSLog(@"row: %lu", indexPath.row);
其中row
的类型为NSUInteger
。我得到的错误是:
转换指定类型为“unsigned long”,但参数的类型为“NSUInteger”(又名“unsigned int”)
我可以执行以下操作,而不会出现编译错误:
NSString * string = [NSString stringWithFormat:@"row: %lu", indexPath.row];
我在两种情况下都使用了完全相同的格式字符串和替换参数,但是为什么NSLog
会出问题而-stringWithFormat:
却看起来完全正常?我的编译器是LLVM 1.6。
NSLog()
是一个直接的 C 风格函数调用,而-stringWithFormat:
则是一个 Objective-C 方法调用;因此编译器可能需要不同的机制来警告格式字符串和实际参数类型之间的不匹配。 - David Gelhar