我怀疑这很简单,但是我正在尝试将我存储在字典中的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"]
是NSNumber
或NSString
实例。
您有两个问题。首先,[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];