NSInteger不等于long?

时间:2015-08-18 18:13:46

标签: objective-c json cocoa long-integer nsinteger

我正在尝试解析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。 从字典中检索的值很长。

1 个答案:

答案 0 :(得分:2)

您不能简单地将NSNumber(甚至NSString)投射到NSInteger。字典和其他集合类不能存储基本类型,如NSInteger

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

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