1

Apple JSON(アプリの評価)から何かを解析していて、次のようなものを試しました:

 if ([StoreParse objectForKey:@"averageUserRating"] == @"4.5") {
        NSLog(@"xx");
    } else {
        NSLog(@"xxx");
    }

アプリの評価は4.5で、もしそうなら

NSlog (@"%@", [StoreParse objectForKey:@"averageUserRating"]);

出力は:4.5

しかし、スクリプトを実行すると、最初のコードの出力のNSlogは「xxx」です。誰かが私を助けることができますか?

4

4 に答える 4

6

基本的に NSSring クラスのインスタンスへのポインタである文字列を比較することは誤りです。同じ内容の 2 つの文字列が異なるメモリ アドレスを持つ可能性があるためです。使用する

if ([[StoreParse objectForKey:@"averageUserRating"] isEqualToString:@"4.5"])

代わりは。

于 2012-05-12T21:17:20.517 に答える
4

あなたはこれを行うことはできません:

if ([StoreParse objectForKey:@"averageUserRating"] == @"4.5")

あなたがする必要があります:

if ([[StoreParse objectForKey:@"averageUserRating"] isEqualToString:@"4.5"])

それは文字列だと仮定しています。その場合は、次のNSNumberようにします。

if ([[StoreParse objectForKey:@"averageUserRating"] floatValue] == 4.5f)

(ただし、フロートの同等性の比較には注意してください

文字列の同等性の詳細については、この質問を参照してください。

于 2012-05-12T21:11:46.160 に答える
4

使用isEqualToString

if ([[StoreParse objectForKey:@"averageUserRating"] isEqualToString:@"4.5"]) {
    NSLog(@"xx");
}
于 2012-05-12T21:11:46.643 に答える
0

の値が の場合averageUserRatingは、最初NSNumberにフォーマット済みに変換してから、文字列リテラルNSStringと比較する必要があります。@"4.5"

if ([[NSString stringWithFormat:@"%1.1f", [[StoreParse objectForKey:@"averageUserRating"] floatValue]] isEqualToString:@"4.5"])
于 2012-05-14T01:57:15.020 に答える