2013-01-21 56 views
1

我有一本字典申報,這樣,目標C:比較詞典內容

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} 
+2

«我認爲一個鍵的值類型的NSString的»它看起來像假設可能是錯誤的。你應該先驗證一下。然後看看[瞭解NSString比較](http://stackoverflow.com/questions/3703554/understanding-nsstring-comparison-in-objective-c) –

+3

任何合理的JSON解析器都應該將數字映射到NSNumber而不是NSString。如果乍一看對你來說不明顯,那麼閱讀你正在使用的JSON解析器的文檔。 – 2013-01-21 18:59:54

+0

默認obj-c字典中鍵和值的類型是id – tttthomasssss

回答

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"); 
} 
4

唯一合理的解釋是,[responseDict objectForKey:@"A"]未返回NSString

你可能會得到一個NSNumber回來,因此比較失敗。

如果是這種情況,您需要從NSNumber獲得NSString,然後再將其與常數進行比較。您可以通過

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

做它也從來沒有使用==比較NSString小號實例。堅持與isEqualToString,你會很好。

9

NSDictionary方法isEqualToDictionary可以用來比較2個字典

返回一個布爾值,指示 接收字典的內容是否與另一個給定的 字典的內容相同。

例如:

[myDictionary isEqualToDictionary:expectedDictionary]