不能隐式地将类型'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实际上是NSIntegerint类型。

当使用说明符,尝试使用%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);

+0

INT theinteger = 75; (@“整数后:%@”,字符串);'code' – user1117361 2012-01-05 08:48:28