-2

嗨,我在使用 %lu 时收到此警告:

“格式指定类型 unsigned long 但参数的类型为 unsigned int。”

然后当我替换为 %u: 时,警告变为:

“格式指定类型 unsigned int 但参数的类型为 unsigned long。”

这是我的代码:

NSString *viewName_ = [NSString stringWithFormat:@"myGreatView%lu", currentTagLoadedOnView-99];

currentTagLoadedOnView:

NSUInteger currentTagLoadedOnView;

非常感谢任何帮助....

4

2 回答 2

2

的实际类型NSUInteger会有所不同,具体取决于您编译为 32 位还是 64 位。因此,无论您使用什么格式,在 32 位版本或 64 位版本中都会收到警告。解决方案很简单:

NSString *viewName_ = [NSString stringWithFormat:@"myGreatView%lu", (unsigned long) (currentTagLoadedOnView-99)];

NSUInteger可以unsigned long在 32 位和 64 位系统上强制转换而不会丢失信息。

于 2014-03-11T09:45:20.010 回答
0

尝试以下任何一种

1)同时使用unsigned int

NSString *viewName_ = [NSString stringWithFormat:@"myGreatView%u", currentTagLoadedOnView-99];

并将 currentTagLoadedOnView 声明为NSUInteger currentTagLoadedOnView;

2) 类型转换为 unsigned long

NSString *viewName_ = [NSString stringWithFormat:@"myGreatView%lu", (unsigned long) currentTagLoadedOnView-99];

并将 currentTagLoadedOnView 声明为NSUInteger currentTagLoadedOnView;

3) 定义为 unsinged long as both

NSString *viewName_ = [NSString stringWithFormat:@"myGreatView%lu", (unsigned long) currentTagLoadedOnView-99];

并将 currentTagLoadedOnView 声明为unsigned long currentTagLoadedOnView;

注意:如果您仅使用 64 位架构(更改一致的数据类型)或仅使用 32 位架构(无更改),您的警告将消失。如果你使用Standard architecture(including 64-bit),它会给出这个警告。

于 2014-03-11T09:02:04.007 回答