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

Phi*_*hil 14 objective-c ios

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

 int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果我试试......

NSNumber *mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助.

WDU*_*DUK 38

几点:

  • [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];
Run Code Online (Sandbox Code Playgroud)


jun*_*dev 5

 int mapX = (int)[[templateObject valueForKey:@"mapX"] integerValue];
Run Code Online (Sandbox Code Playgroud)

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

 int mapX = (int)[(NSNumber *)[templateObject valueForKey:@"mapX"] integerValue];
Run Code Online (Sandbox Code Playgroud)

ObjC 中的类型转换是最糟糕的。