我正在尝试解析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。 从字典中检索的值很长。
答案 0 :(得分:2)
您不能简单地将NSNumber
(甚至NSString
)投射到NSInteger
。字典和其他集合类不能存储基本类型,如NSInteger
。
假设您的字典包含数字而不是字符串,那么您需要:
NSNumber *number = [jsonData valueForKeyWithoutNSNull:@"id"];
_userID = [number integerValue];