-2

UILabelXcode でa を使用して、この条件ステートメントで何が間違っていますか?

単純化した例ですが、 のUILabelテキストに関連して の内容を変更しようとしていますUILabel

-(IBAction)answerQuestion:(id)sender{
    NSString *startingLableContent = @"Do dogs bark?";
    NSString *answer = @"Yes.";
    NSString *askAnother = @"What else do you want?";
    if (mainLable.text == startingLableContent) {
        mainLable.text = answer;
    }else if (mainLable.text == answer){
        mainLable.text = askAnother;
    }
}
4

5 に答える 5

1

を使用してそれらを比較する必要がありますisEqualToString

このような:

if ([mainLable.text isEqualToString:startingLableContent]) 

そうしないと、コンテンツではなくメモリの場所をテストすることになります。

于 2013-04-30T19:32:25.980 に答える
0

Objective-C で文字列を比較するには、isEqualToStringを使用します

-(IBAction)answerQuestion:(id)sender{
    NSString *startingLableContent = @"Do dogs bark?";
    NSString *answer = @"Yes.";
    NSString *askAnother = @"What else do you want?";
    if ([startingLableContent isEqualToString:mainLable.text]) {
        mainLable.text = answer;
    }else if ([answer isEqualToString:mainLable.text]){
        mainLable.text = askAnother;
    }
}
于 2013-04-30T19:32:41.177 に答える
0

これを試して:

if ([mainLable.text isEqualToString:startingLableContent]) {
// do stuff
}
于 2013-04-30T19:33:18.357 に答える
0

==

ただ言うことはできないことがわかりましたif (someString == someOtherString)。ほとんどの場合、返されNOます。

文字列がメモリに格納されている場所に関するいくつかのことと関係があります。int や double などで使用できます==が、NSString では次のことを行う必要があります。

if ([mainLabel.text isEqualToString:someOtherString])

したがって、メソッド次のようになります。

-(IBAction)answerQuestion:(id)sender{
    NSString *startingLableContent = @"Do dogs bark?";
    NSString *answer = @"Yes.";
    NSString *askAnother = @"What else do you want?";
    if ([mainLable.text isEqualToString:startingLableContent]) {
        mainLable.text = answer;
    }else if ([mainLable.text isEqualToString:answer]){
        mainLable.text = askAnother;
    }
}
于 2013-04-30T19:33:52.377 に答える
0

実際の文字列ではなく、ポインターを比較します。文字列を比較したい場合は、isEqualToString代わりに使用することを検討してください。

于 2013-04-30T19:35:02.680 に答える