我怀疑这是非常简单的事情,但我正在尝试获取一个存储在字典中的int,我正在使用的是这个..
int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];
但它给了我错误......
指向整数转换的指针不兼容,将'id'发送到参数 类型'int'
和
指向整数转换的指针不兼容使用。初始化'int' 表达式'NSNumber *';
如果我尝试......
NSNumber *mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];
我基本上得到了同样的错误。我知道我可能只是使用了错误的语法,但我不确定如何编写它。
感谢您的帮助。
答案 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"]
是NSNumber
或NSString
个实例,应该有效。
答案 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];