不能隐式地将类型'integer'转换为'NSString' -
问题描述:
我想问一下关于类型转换的非常简单的事情。不能隐式地将类型'integer'转换为'NSString' -
int theinteger = 75;
NSLog(@"Before theinteger is: %@", theinteger);
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
NSLog(@"After theinteger is: %@", string);
输出类似
Before theinteger: 75
After theinteger: 114503696
这是什么意思?为什么在转换后我的数据更改为114503696?
当我试图
int theinteger = -1;
这是确定的
Before theinteger: -1
After theinteger: -1
我缺少的东西?
答
没有看到它的任何证据,我认为theinteger
实际上是NSInteger
或int
类型。
当使用说明符,尝试使用%I:
NSInteger theinteger = 75;
NSLog(@"theinteger is: %i", theinteger);
输出
theinteger is: 75
说明符Here's a list。
答
您不应该将%@用作整数的格式说明符,就像在第一个日志语句中一样。不过,我的猜测是你在这里发布的代码实际上并不是你正在使用的代码,因为该行NSLog(@"Before theinteger is: %@", the integer);
由于“整数”中的空间而不会实际编译。你能复制/粘贴你的实际代码吗?
无论如何,%@
是Objective-C对象的格式说明符。当NSLog()
看到%@
时,它将其替换为通过调用-(NSString *)description
对变量列表中的相应对象返回的NSString。在你的情况下,NSLog()
看到%@并假定这意味着整数是一个Objective-C对象,事实并非如此。
如果要打印的整数,则应该使用的%格式说明I(或另一个的几个整数格式说明):
NSLog(@"Before theinteger is: %i", theinteger);
INT theinteger = 75; (@“整数后:%@”,字符串);'code' – user1117361 2012-01-05 08:48:28