"Incompatible pointer to integer conversion initializing 'int' with an expression of type 'NSNum



我怀疑这很简单,但是我正在尝试将我存储在字典中的int,而我正在使用的行是。

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

,但这给了我错误...

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

不兼容的指针,用于整数转换初始化'int' 类型" nsnumber *"的表达;

如果我尝试...

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

我基本上会遇到相同的错误。我知道我可能只是在使用错误的语法,但我不确定还要写它。

感谢您的任何帮助。

几点:

  • [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];
 int mapX = (int)[[templateObject valueForKey:@"mapX"] integerValue];

上面的解决方案是假设templateObject valueforkey:@" mapx"返回nsnumber。如果不是,并且要将其转换为nsnumber,请改用此解决方案:

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

在OBJC中打字是.worst。

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

毫无意义,原因有两个(暂时考虑一下),但是

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

应该假设[templateObject valueForKey:@"mapX"]NSNumberNSString实例。

您有两个问题。首先,[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];

相关内容

  • 没有找到相关文章

最新更新