NSNumber 返回错误值

问题描述 投票:0回答:2

我有

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 }

objective-c nsdictionary nsnumber
2个回答
5
投票

你猜怎么着?

所有这些日志和问题都表明我的 NSNumber 属性无法存储某些整数。但整数范围是多少?

-32,768 / 32,768

之间的整数

但是为什么呢?因为我已经定义了我的托管对象

price
属性
NSInteger 16
!

我应该将其定义为

NSInteger 32


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

© www.soinside.com 2019 - 2024. All rights reserved.