我有
NSDictionary
并且我将“价格”键的值分配给对象的 NSNumber
属性,但是当我记录数值时,它是一个奇怪的负数!
item.price = [food valueForKey:@"price"];
价格属性是
NSNumber
[[food valueForKey:@"price"] class]
将打印
__NSCFNumber
,这是正确的。
[[food valueForKey:@"price"] intValue]
返回
0x000000000000c350
,即50000
,没错
但是当我记录
item.price
或[item.price integerValue]
时,它是-15536
,这是完全错误的!
有什么想法吗?
食物 json 示例:
{ "title":"披萨", “价格”:50000 }
你猜怎么着?
所有这些日志和问题都表明我的 NSNumber 属性无法存储某些整数。但整数范围是多少?
-32,768 / 32,768
之间的整数
但是为什么呢?因为我已经定义了我的托管对象
price
属性 NSInteger 16
!
我应该将其定义为
NSInteger 32
假设您正在尝试这样做:
NSDictionary *inventory = @{
@"price" : [NSNumber numberWithInt:50000]
};
NSNumber *num= [inventory valueForKey:@"price"];
NSLog(@"%d,%f,%ld,%@",num,num,num,num);
日志将显示为:
800002,-0.000000,-5764607523033434878,50000
它们都完全不同。最后一个是正确的
NSNumber
对象
NSNumber
是一个对象,所以你需要使用%@来记录它,其余的%d,%f,%ld不是对象。