NSNumber returns 错误的值

NSNumber returns wrong value

我有 NSDictionary 并且我将 'price' 键的值分配给对象的 NSNumber 属性 但是当我记录数字值时,它是一个奇怪的负数!

item.price = [food valueForKey:@"price"];

价格 属性 是 NSNumber

[[food valueForKey:@"price"] class]

将打印 __NSCFNumber 这是正确的。

[[food valueForKey:@"price"] intValue]

returns 0x000000000000c350 也就是 50000 没错

但是当我登录 item.price[item.price integerValue] 时,它是 -15536 这是完全错误的!

有什么想法吗?

食物json样本:

{ "title":"Pizza", "price":50000 }

假设您正在尝试这样做:

NSDictionary *inventory = @{
                                @"price" : [NSNumber numberWithInt:50000]

                                };
    NSNumber *num= [inventory valueForKey:@"price"];

     NSLog(@"%d,%f,%ld,%@",num,num,num,num);

日志将显示为:

 800002,-0.000000,-5764607523033434878,50000

全部都完全different.The最后一个是正确的NSNumber对象

NSNumber 是一个对象,所以你需要使用 %@ 来记录它,剩下的 %d,%f,%ld 不是对象。

你猜怎么着?

所有这些日志和问题都显示我的 NSNumber 属性 无法存储一些整数。但是整数的范围是多少? -32,768 / 32,768

之间的整数

但是为什么呢?因为我定义了我的托管对象 price 属性 类型 NSInteger 16!

我应该定义为NSInteger 32