目标C:比较字典内容

Vin*_*aka 1 objective-c nsdictionary nsstring

我有一个字典声明,像这样,

NSString *responseString = [request responseString];
            responseDict = [responseString JSONValue];
            for (id key in responseDict){
                NSLog(@"%@ : %@", key, [responseDict objectForKey:key]);
            }
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

现在,我想比较值并对其进行一些操作.我假设一个键的值是NSString类型,并将它与我的常量NSString进行比较,像这样,

NSString *myString1 = @"0";     
NSString *myString2 = [responseDict objectForKey:@"A"];

NSLog(@"%d", (myString1 == myString2)); //1
NSLog(@"%d", [myString1 isEqualToString:myString2]); //1
Run Code Online (Sandbox Code Playgroud)

结果:

2013-01-22 00:19:12.966 PromoTest[2423:c07] 0
2013-01-22 00:19:12.966 PromoTest[2423:c07] 0
Run Code Online (Sandbox Code Playgroud)

我哪里错了?我的比较错了吗?如何正确比较内容?
数据作为来自Web服务的响应数据被接收.我只是将数据转换为字典以便于使用它.Web服务返回一个JSON对象,

{"A":0,"B":1,"C":0}
Run Code Online (Sandbox Code Playgroud)

sas*_*ash 9

NSDictionary方法isEqualToDictionary可用于比较2个词典

返回一个布尔值,指示接收字典的内容是否等于另一个给定字典的内容.

例如:

[myDictionary isEqualToDictionary:expectedDictionary]
Run Code Online (Sandbox Code Playgroud)


Gab*_*lla 5

唯一合理的解释[responseDict objectForKey:@"A"]是没有返回NSString.

您可能会NSNumber回来,因此比较失败。

如果是这种情况,您需要在将其与常量进行比较之前NSString从 中获取 a NSNumber。你可以通过

NSString * myString2 = [[responseDict objectForKey:@"A"] stringValue];
Run Code Online (Sandbox Code Playgroud)

也永远不要用于==比较NSStrings 实例。坚持下去,isEqualToString你会好起来的。