您好我在使用%lu时收到此警告:
“format指定unsigned long类型,但参数的类型为unsigned int。”
然后当我替换为%u时:警告变为:
“format指定unsigned int类型,但参数的类型为unsigned long。”
这是我的代码:
NSString *viewName_ = [NSString stringWithFormat:@"myGreatView%lu", currentTagLoadedOnView-99];
其中currentTagLoadedOnView:
NSUInteger currentTagLoadedOnView;
任何帮助都非常感谢....
答案 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)
,则会发出此警告。