NSInteger 不等于长?

NSInteger not equal to long?

我正在尝试解析 Cocoa 中的一些 json 数据,但我遇到了 NSInteger 数据类型的问题。 json 字符串有一些我分配给 NSInteger 属性的长值。不幸的是,分配的 NSInteger 值与 long 值完全不同。为什么? NSInteger 被定义为 typedef long NSInteger。我可以将 long 值分配给 long 属性 但我只是想知道为什么我不能将它分配给 NSInteger.

    -(void)parseData:(NSData*)data
{
    NSError*err=nil;
    NSDictionary*jsonData=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&err];
    _userID=(NSInteger)[jsonData valueForKeyWithoutNSNull:@"id"];
}

_userID 是一个 NSInteger。 从字典中检索到的值是 long。

您不能简单地将 NSNumber(甚至 NSString)转换为 NSInteger。字典和其他集合 类 不能存储像 NSInteger.

这样的基本类型

假设您的字典包含数字而不是字符串,那么您需要:

NSNumber *number = [jsonData valueForKeyWithoutNSNull:@"id"];
_userID = [number integerValue];