Objective-C for Dummies:我如何从NSDictionary获得价值?

时间:2011-01-28 21:23:59

标签: objective-c cocoa nsdictionary

所以我最困难的时候从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中的这个菜鸟真的很感激一些帮助。提前谢谢!

4 个答案:

答案 0 :(得分:4)

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

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

请注意,NSNumber有其他方便的方法来提取其基础值作为其他C数据类型。


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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

  

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

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;