所以我最困难的时候从NSDictionary
中提取价值。现在我只有一个从JSON调用填充的字典,它只包含一个名为'Success'的键,值为0或1。
如何对该值进行条件检查以检查其是0还是1?我尝试了很多东西,但我没有得到任何东西。这是我目前的代码:
[[jsonDictionary objectForKey:@"Success"] isEqualToNumber:1]
我收到passing argument 1 of 'isEqualToNumber:' makes pointer from integer without a cast'
作为警告,无论如何,应用程序在遇到该行时崩溃。
还有一个问题,objectForKey
和valueForKey
之间有什么区别?我应该默认使用哪一个?
无论如何,Objective-C中的这个菜鸟真的很感激一些帮助。提前谢谢!
答案 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;