所以我目前正在开发一个Objective-C项目,我正在调用[mySpecialObject valueForKey:@"myVariable"]
,它应该返回值3(整数)。
通过调试器,键上对象的值实际上是3,但调用[mySpecialObject valueForKey:@"myVariable"]
返回807.
类型转换(id)[mySpecialObject valueForKey:@"myVariable"]
返回(__NSCFNumber *)0x0000000000000327 (int)3
有谁知道造成这种不匹配的原因是什么?我错误地进行了类型转换吗?
格式化:
[mySpecialObject valueForKey:@"myVariable"] // SHOULD RETURN 3
(int)[mySpecialObject valueForKey:@"myVariable"] // returns 807
(id)[mySpecialObject valueForKey:@"myVariable"] // returns (__NSCFNumber *)0x0000000000000327 (int)3
注意:要清楚,myVariable在mySpecialObject中的类型是int,我将返回值转换为int。
答案 0 :(得分:2)
由于valueForKey:
方法返回id
,它必须将所有原语包装到Objective-C对象中。在这种情况下,int
包含在NSNumber
对象中。
如果您知道字段/属性的类型为int
,请执行以下操作:
int num = [[mySpecialObject valueForKey:@"myVariable"] intValue];