“不兼容的指向整数转换的指针,初始化'int',表达式为'NSNumber *'”

时间:2012-11-05 18:37:29

标签: objective-c ios

我怀疑这是非常简单的事情,但我正在尝试获取一个存储在字典中的int,我正在使用的是这个..

 int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

但它给了我错误......

  

指向整数转换的指针不兼容,将'id'发送到参数   类型'int'

  

指向整数转换的指针不兼容使用。初始化'int'   表达式'NSNumber *';

如果我尝试......

NSNumber *mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

我基本上得到了同样的错误。我知道我可能只是使用了错误的语法,但我不确定如何编写它。

感谢您的帮助。

5 个答案:

答案 0 :(得分:31)

有几点:

  • [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

    返回NSNumber*,您尝试将其存储在int中。

  • NSNumber* mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

    也不起作用,因为[templateObject valueForKey:@"mapX"]不是int。您只能以NSDictionary存储对象,而不能存储基本类型。

您可能想尝试(假设我的类型正确)

NSNumber* mapXNum = [templateObject valueForKey:@"mapX"];
int mapX = [mapXNum intValue];

答案 1 :(得分:4)

 int mapX = (int)[[templateObject valueForKey:@"mapX"] integerValue];

上面的解决方案是假设templateObject valueForKey:@“mapX”返回一个NSNumber。如果没有并且您想将其转换为NSNumber,请改用此解决方案:

 int mapX = (int)[(NSNumber *)[templateObject valueForKey:@"mapX"] integerValue];

ObjC中的类型转换是the.worst。

答案 2 :(得分:1)

int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

由于两个原因(暂时考虑一下)没有任何意义,但是

NSNumber *mapX = [NSNumber numberWithInt:[[templateObject valueForKey:@"mapX"] intValue]];
假设[templateObject valueForKey:@"mapX"]NSNumberNSString个实例,

应该有效。

答案 3 :(得分:0)

你有两个问题。首先,[templateObject valueForKey:@"mapX"]返回id,它是指向Objective-C对象的指针,而不是int。由于-[NSNumber numberWithInt:]方法采用int参数,因此尝试将id转换为int是一个错误。

第二个问题是,您尝试将[NSNumber numberWithInt:...]的结果转换为int,这也是同样的问题:-[NSNumber numberWithInt:]返回指向NSNumber的指针对象,不是int

假设您的词典中存储的值实际上是NSNumber,您真正想要做的是:

NSNumber *mapXObj = [templateObject valueForKey:@"mapX"];  // Implicit cast from id to NSNumber*
int mapX = [mapXObj intValue];

或者更简洁:

int mapX = [[templateObject valueForKey:@"mapX"] intValue];

答案 4 :(得分:-1)

我希望这会有所帮助:

int mapX = [[templateObject valueForKey:@"mapX"] intValue];