NSNumber返回错误的值

时间:2015-10-07 15:12:01

标签: objective-c nsdictionary nsnumber

我有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样品:

  

{   "标题":"披萨&#34 ;,   "价格":50000   }

enter image description here

2 个答案:

答案 0 :(得分:5)

猜猜是什么?

所有这些日志和问题都表明我的NSNumber属性不能存储一些整数。但是整数范围是多少?整数介于-32,768 / 32,768

之间

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

我应该将其定义为NSInteger 32

答案 1 :(得分:0)

我们假设您正在尝试这样做:

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不是对象。