将NSNumber转换为long

时间:2018-04-05 07:41:12

标签: ios objective-c nsnumber

我正在尝试将NSNumber转换为long但我收到此错误:

  

[__ NSSingleObjectArrayI intValue]:发送到的无法识别的选择器   实例

这是我的代码:

NSNumber *dbversion = [settings valueForKey:@"Version"];
long dbver = [dbversion longValue];

我在这里做错了什么?

* 设置是NSArray,“Version”是长值的关键。

2 个答案:

答案 0 :(得分:2)

您陷入了键值编码陷阱。

在某些情况下,valueForKey的结果是错误消息明确指出的数组。

不要永远不要使用valueForKey(除非你知道KVC做了什么,你需要KVC),使用密钥订阅。

由于settings是一个数组,你可能会得到第一个项目

NSNumber *dbversion = settings[0][@"Version"];

int不是long

long dbver = [dbversion longValue];

但是在64位计算机上,我建议使用NSInteger

NSInteger dbver = dbversion.integerValue;

答案 1 :(得分:0)

//我认为你是存储字典中的字符串"设置"对NSNumber来说,它显示的错误就像你提到的那样。 请尝试使用解决方案。愿这对你有所帮助。

NSNumber *dbversion = [NSNumber numberWithLong:[[settings valueForKey:@"Version"] longLongValue]];
int dbver = [dbversion longValue];