我有一个字典,像这样,
NSString *responseString = [request responseString];
responseDict = [responseString JSONValue];
for (id key in responseDict){
NSLog(@"%@ : %@", key, [responseDict objectForKey:key]);
}
结果:
013-01-22 00:14:02.323 PromoTest[2352:c07] A : 0
2013-01-22 00:14:02.325 PromoTest[2352:c07] B : 1
2013-01-22 00:14:02.325 PromoTest[2352:c07] C : 0
现在,我想比较该值并对其进行一些操作。我假设一个键的值是NSString类型,并将它与我的常量NSString进行比较,像这样,
NSString *myString1 = @"0";
NSString *myString2 = [responseDict objectForKey:@"A"];
NSLog(@"%d", (myString1 == myString2)); //1
NSLog(@"%d", [myString1 isEqualToString:myString2]); //1
结果:
2013-01-22 00:19:12.966 PromoTest[2423:c07] 0
2013-01-22 00:19:12.966 PromoTest[2423:c07] 0
我哪里错了?我的比较错了吗?如何正确比较内容?
数据作为来自Web服务的响应数据被接收。我只是将数据转换为字典以便于使用它。 Web服务返回JSON对象
{"A":0,"B":1,"C":0}
答案 0 :(得分:9)
NSDictionary
方法isEqualToDictionary
可用于比较2个词典
返回一个布尔值,指示是否有内容 接收字典等于另一个给定的内容 字典。
例如:
[myDictionary isEqualToDictionary:expectedDictionary]
答案 1 :(得分:4)
唯一合理的解释是[responseDict objectForKey:@"A"]
没有返回NSString
。
您可能会收到NSNumber
,因此比较失败。
如果是这种情况,您需要从NSString
获取NSNumber
,然后再将其与常量进行比较。你可以通过
NSString * myString2 = [[responseDict objectForKey:@"A"] stringValue];
也绝不要使用==
来比较NSString
个实例。坚持isEqualToString
,你会很好。
答案 2 :(得分:2)
您可以比较数字对象,而不是比较字符串。这里包括检查,如果返回的对象是NSNumber,如果没有,请尝试作为字符串:
if([responseDict[@"A"] isKindOfClass:[NSNumber class]]){
NSNumber *myNumber1 = @0;
NSNumber *myNumber2 = [responseDict objectForKey:@"A"];
NSLog("Same number: %@",[myNumber1 isEqualToNumber:myNumber2] ? @"YES" : @"NO");
} else if([responseDict[@"A"] isKindOfClass:[NSString class]]){
NSString *myString1 = @"0";
NSString *myString2 = [responseDict objectForKey:@"A"];
NSLog("Same string: %@",[myString1 isEqualToString:myString2] ? @"YES" : @"NO");
}