【问题标题】:Objective-C for Dummies: How do I get a value out of NSDictionary?Objective-C for Dummies:如何从 NSDictionary 中获取值?
【发布时间】:2011-01-28 21:23:59
【问题描述】:

所以我很难从NSDictionary 中提取值。现在我只有一个从 JSON 调用填充的字典,它只包含一个名为“Success”的键,值为 0 或 1。

如何对该值进行条件判断以检查其是 0 还是 1?我已经尝试了很多事情,但我没有得到任何地方。这是我当前的代码:

[[jsonDictionary objectForKey:@"Success"] isEqualToNumber:1]

我收到了passing argument 1 of 'isEqualToNumber:' makes pointer from integer without a cast' 作为警告,并且应用程序在到达该行时崩溃。

还有一个子问题,objectForKeyvalueForKey 有什么区别?我应该默认使用哪一个?

无论如何,Objective-C 中的这个菜鸟会非常感谢您在这方面的帮助。提前致谢!

【问题讨论】:

  • objectForKeyvalueForKey 之间的差异已经讨论过here
  • @Martin 不错的答案。我会收藏这个问题以方便使用。
  • @Martin,感谢您的链接,现在有意义了。

标签: objective-c cocoa nsdictionary


【解决方案1】:

由于字典包含 Objective-C 对象,因此包含数字的条目是 NSNumber 实例。 NSNumber 提供了一种方便的方法-intValue,用于提取其底层int 值:

if ([[jsonDictionary objectForKey:@"Success"] intValue] == 1) { … }

请注意,NSNumber 有其他便捷方法可以将其基础值提取为其他 C 数据类型。


在大多数情况下,您应该使用-objectForKey: 而不是-valueForKey: 前者是获取字典条目的规范方法,在NSDictionary 中声明。后者在 NSObject 中声明并用于键值编码上下文中,其中键必须是有效的 KVC 键,并且还有额外的处理——例如,如果您在带有键的字典中使用 -valueForKey:以@ 开头的字符会从键中删除并调用[super valueForKey:key]

【讨论】:

  • 你又一次救了我,谢谢!条件有效,现在我必须弄清楚如何采取行动。 Objective-C 对我来说是一个缓慢的学习经历...
  • @Alex 干杯。请注意,如果密钥不在字典中,-intValue 将返回 0。在某些情况下,我首先从字典中获取对象(例如NSNumber *success = [jsonDictionary objectForKey:@"Success"];)并测试它是否与nil 不同,以首先确保字典中的键可用。祝你的项目好运!
【解决方案2】:

数字 1 不是对象指针。如果您想在 NSDictionary 中使用数字,请改用 NSNumber 实例。

[[jsonDictionary objectForKey:@"Success"]
 isEqualToNumber:[NSNumber numberWithInteger:1]]

【讨论】:

    【解决方案3】:
     [[jsonDictionary objectForKey:@"Success"] isEqualToNumber: [NSNumber numberWithInt:1]]
    

    【讨论】:

      【解决方案4】:

      您可以通过不同的方式获取字典的值,例如检查 价值第一。

      Solution 1: Using simple if statement.
      int value = 0;
      if ([[jsonDictionary objectForKey:@"Success"]intValue]==1){
          value = [[jsonDictionary objectForKey:@"Success"]intValue];
      }
      
      Solution 2: Using ternary operator
      value = ([[jsonDictionary objectForKey:@"Success"]intValue]==1) ? 1:0;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-12
        • 2014-03-16
        相关资源
        最近更新 更多