%lu和%u都给我警告....

时间:2014-03-11 08:57:00

标签: ios xcode nsuinteger

您好我在使用%lu时收到此警告:

“format指定unsigned long类型,但参数的类型为unsigned int。”

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

“format指定unsigned int类型,但参数的类型为unsigned long。”

这是我的代码:

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

其中currentTagLoadedOnView:

NSUInteger currentTagLoadedOnView;

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

2 个答案:

答案 0 :(得分:2)

NSUInteger的实际类型根据您是编译为32位还是64位而有所不同。因此,无论使用何种格式,您都会收到警告,无论是32位构建还是64位构建。解决方案非常简单:

NSString *viewName_ = [NSString stringWithFormat:@"myGreatView%lu", (unsigned long) (currentTagLoadedOnView-99)];
在{32}和64位系统上,

NSUInteger可以转换为unsigned long而不会丢失信息。

答案 1 :(得分:0)

尝试以下任何一种

1)同时使用unsigned int

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

并将currentTagLoadedOnView声明为NSUInteger currentTagLoadedOnView;

2)输入无符号长

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

并将currentTagLoadedOnView声明为NSUInteger currentTagLoadedOnView;

3)定义为unsinged long为

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

并将currentTagLoadedOnView声明为unsigned long currentTagLoadedOnView;

注意:如果仅使用64位架构(对一致数据类型进行更改)或仅使用32位(无更改),则警告将消失。如果您使用Standard architecture(including 64-bit),则会发出此警告。