19

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

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

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

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

指向使用“NSNumber *”类型表达式初始化“int”的整数转换的不兼容指针;

如果我尝试...

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

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

谢谢你的帮助。

4

4 回答 4

44

几点:

  • [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];
于 2012-11-05T18:38:52.390 回答
5
 int mapX = (int)[[templateObject valueForKey:@"mapX"] integerValue];

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

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

ObjC 中的类型转换是最差的。

于 2015-08-07T16:52:29.117 回答
1
int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

没有意义有两个原因(想一想),但是

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

应该工作假设[templateObject valueForKey:@"mapX"]是一个NSNumber或一个NSString实例。

于 2012-11-05T18:39:21.987 回答
0

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

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

假设存储在字典中的值实际上是 an NSNumber,那么您真正想要做的是:

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

或者更简洁地说:

int mapX = [[templateObject valueForKey:@"mapX"] intValue];
于 2012-11-05T18:46:08.363 回答