【问题标题】:How to get an integer value from NSDictionary?如何从 NSDictionary 获取整数值?
【发布时间】:2025-12-15 21:05:02
【问题描述】:

我遇到了这个奇怪的问题。 NSDictionary 没有返回正确的整数值。

来自服务器的 JSON 响应代码。

{
"status":"ok",
"error_code":0,
"data" : [],
"msg":"everything is working!"
}

JSON 正在被转换为 NSDictionary。

NSError *error = nil;
NSDictionary *jsonDict = [NSJSONSerialization
                          JSONObjectWithData:data
                          options:NSJSONReadingMutableContainers
                          error: &error];

我使用以下代码访问 NSDictionary 值。

int error_code = (int)[jsonDict valueForKey:@"error_code"]
NSLog(@"%i", error_code);
The log outputs the following: 143005344

我什至尝试过 objectForKey 并得到相同的响应。

谢谢,提前。

【问题讨论】:

    标签: ios objective-c json


    【解决方案1】:

    是的,它输出值的指针,这就是您看到此日志输出的原因。

    您不能将指针转换为整数并期望该值。

    int error_code = [[jsonDict valueForKey:@"error_code"] integerValue];
    

    或者如果你想使用现代的objective-c

    int error_code = [jsonDict[@"error_code"] integerValue];
    

    【讨论】:

    • 你应该使用intintValue,或者NSIntegerintegerValue——但是你不应该在没有明确演员表的情况下混合它们。
    • 感谢它对我帮助很大。我可以正确地 NSLog 所有键/值对,但尝试存储 Int 值我也收到了一个指针。这个答案对我帮助很大!
    • 这是什么构造?它是在 Objective-C 中转换的另一种方式吗?
    【解决方案2】:

    数字在 plist/json 字典中存储为 NSNumber 实例。尝试调用NSNumber 的getter 之一,例如intValue

    int error_code = [jsonDict[@"error_code"] intValue];
    

    还要注意字典的新下标语法。

    【讨论】: