无法将类型'integer'隐式转换为'NSString' -

时间:2012-01-04 14:28:51

标签: objective-c 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

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

在没有看到任何证据的情况下,我认为theinteger实际上属于NSIntegerint类型。

使用说明符时,请尝试使用%i

NSInteger theinteger = 75;
NSLog(@"theinteger is: %i", theinteger);

<强>输出

theinteger is: 75

Here's a list说明符。

答案 1 :(得分:1)

您不应该使用%@作为整数的格式说明符,就像在第一个日志语句中一样。但是,我的猜测是你在这里发布的代码实际上并不是你正在使用的代码,因为由于“整数”中的空格,这行NSLog(@"Before theinteger is: %@", the integer);实际上不会编译。你能复制/粘贴你的实际代码吗?

无论如何,%@是Objective-C对象的格式说明符。当NSLog()看到%@时,它会将其替换为通过在变量列表中的相应对象上调用-(NSString *)description返回的NSString。在你的情况下,NSLog()看到%@并假设这意味着整数是一个Objective-C对象,它不是。

如果要打印整数,则应使用%i的格式说明符(或几个整数格式说明符中的另一个):

NSLog(@"Before theinteger is: %i", theinteger);