【问题标题】:NSInteger not equal to long?NSInteger 不等于 long?
【发布时间】:2015-08-18 18:13:45
【问题描述】:

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

【问题讨论】:

  • 用真实代码和真实数据更新您的问题。清楚你所看到的价值观。
  • 我从 parse 方法中添加了一个 sn-p,希望对您有所帮助。

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


【解决方案1】:

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

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

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

【讨论】:

  • 是的,你是对的,我完全忘记了,谢谢 :) .
  • @ok404 很高兴我能帮上忙。请不要忘记接受答案以表明它解决了您的问题。
猜你喜欢
  • 2017-05-25
  • 2011-07-12
  • 1970-01-01
  • 2016-08-11
  • 2012-05-23
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多