我有一个关于如何比较NSDictionary的结果和整数的简单问题 我在日志上打印关键结果中的数据等于0
日志
2014-09-17 10:25:42.848 School Link Version 2 [1027:60b]结果为0
但是当我比较它,它的dosnt工作 我希望知道为什么,它的简单比较
-(void) didFinish:(NSMutableData *)data{
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"the result are %@",json[@"result"]);
if (json[@"result"] == 0) {
[[self _delegate] didFailWithMessage:json[@"message"]];
return;
}
}
答案 0 :(得分:8)
将string与int进行比较,需要将字符串值转换为int:
if ([json[@"result"] intValue] == 0) {
答案 1 :(得分:2)
首先,如果服务器没有为您提供字典,而是一个数组,您的代码将会崩溃。由于您无法控制服务器发送的内容,因此您的应用可能会随时崩溃。您可以通过编写
来检查是否收到了字典if (! [json isKindOfClass:[NSDictionary class]]) { /* Handle error */ }
一旦你知道它是一本字典,你需要检查你真正期望的项目类型。你期望一个字符串,一个整数,一个十进制数?您应该有JSON数据的规范。如果你不确定或者想要灵活,字符串和数字都会产生一个对象,它将支持诸如" doubleValue"," integerValue"之类的消息。等。提取项目并将其分配给支持" doubleValue"的类的指针。
NSString* result = json [@"result"];
if (! [result respondsToSelector:@selector (doubleValue)]) { /* Handle error */ }
现在您可以检查doubleValue是否等于0.
if ([result doubleValue] == 0.0) { ... }
如果值是一个大整数,intValue将失败。
integerValue略好一些,但如果值为例如数字0.3或字符串" 0.3"则会失败。如果结果是带有内容的字符串" Hello"则一切都会失败。如果结果== nil(没有键"结果")或者结果== [NSNull null](还有一个键:值对"你也应该弄清楚你想要做什么)结果":null)
您实际编写的代码比较了存储在密钥"结果"使用0,即使用nil指针。如果JSON数据不包含该键下的任何内容,则该对象将为nil。例如,
if (json [@"RandomNonsenseKey"] == 0)
很可能会成功(除非您的服务器使用密钥RandomNonsenseKey发送数据)。