1

このように宣言された辞書があります。

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}
4

3 に答える 3

10

NSDictionaryメソッドisEqualToDictionaryを使用して 2 つの辞書を比較できます

受け取ったディクショナリの内容が別の指定されたディクショナリの内容と等しいかどうかを示すブール値を返します。

例えば:

[myDictionary isEqualToDictionary:expectedDictionary]
于 2014-12-17T15:24:22.697 に答える
5

唯一の合理的な説明は、[responseDict objectForKey:@"A"]を返さないことNSStringです。

あなたはおそらくNSNumber戻ってきているので、比較は失敗します。

その場合は、定数と比較する前にNSStringからを取得する必要があります。NSNumberあなたはそれを行うことができます

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

また、 s インスタンスの==比較には使用しないでください。NSString固執するisEqualToStringと、うまくいくでしょう。

于 2013-01-21T18:59:00.747 に答える
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");
}
于 2013-01-21T19:08:58.303 に答える