-3

重複の可能性:
if ステートメントの比較が機能しないのはなぜですか?

- (NSInteger)setSegment:(NSString *)segmentValue{
NSLog(@"setSegment began");
NSLog(@"Input Value: %@", segmentValue);
NSInteger var = -1;
if (segmentValue == @"Yes"){
    var = 1;
    NSLog(@"%d", var);
}
else if (segmentValue == @"East"){
    var = 1;
    NSLog(@"%d", var);
}
else if (segmentValue == @"No"){
    var = 0;
    NSLog(@"%d", var);
}
else if (segmentValue == @"North"){
    var = 0;
    NSLog(@"%d", var);
}
else if (segmentValue == @"South"){
    var = 2;
    NSLog(@"%d", var);
}
else if (segmentValue == @"West"){
    var = 3;
    NSLog(@"%d", var);
}
NSLog(@"%d", var);
return var;

}

このメソッドを実行すると、正しい値が記録され、毎回 -1 が返されます。true を返す必要がある場合でも、if ステートメントは実行されません。

4

3 に答える 3

3

NSString を と比較してみてくださいisEqualToString。ここを参照してください: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

于 2013-02-03T10:15:48.607 に答える
2

これはオーバーロード可能な演算子を持つ C++ ではありません。==は常にそのオペランドに対して数値比較を行い、 の場合はNSString *ポインター型であり、ポインターが等しいことを意味します。isEqualToString:メソッドを使用してオブジェクトを比較する必要がありNSStringます。

于 2013-02-03T10:16:09.910 に答える
1

これは典型的な間違いであり、多くのプログラミング言語で発生する可能性があります。問題は、文字列オブジェクトへの参照がメモリ内のオブジェクトのアドレスへのポインタであり、コードが文字列の内容ではなくポインタ値を比較することです。これは意図したものです。

例えば

NSString *a = @"Hello";
NSString *b = @"World";

次に、アドレスがあり、aアドレスがあると想像して0x12345678ください。コードが効果的に行っていることは次のとおりです。b0x12348765

if (0x12345678 == 0x12348765)
{
    ...
}

文字列の内容を比較するには、NSStringメソッドisEqualToString( reference ) を使用します。

于 2013-02-03T10:32:10.197 に答える