2

このコードにはエラーはありませんが、ボタンをクリックしても「if」ステートメントの何も機能しません。クラッシュしたりエラーが表示されたりすることはありません...ところで、iPhoneアプリのXcodeで動作しています。

#import "MainView.h"

@implementation MainView

@synthesize MyButton2, MyMainTextLabel;
@synthesize MyButton3, MyMainTextLabel;
@synthesize MyButton2, Button2Label;
@synthesize MyButton2, Button3Label;
@synthesize MyButton3, Button2Label;
@synthesize MyButton3, Button3Label;


- (IBAction)Button2click {


    if(Button2Label.text == @"Hello There!") {

        MyMainTextLabel.text = @"\"Hey...!!\"";

        Button3Label.text = @"What a rude Penguin!";
        Button2Label.text = @"Hows a Goin?";
    }

}

- (IBAction)Button3click {

    if(Button3Label.text == @"Penguins SUCK!") {

        MyMainTextLabel.text = @"\"DONT TEST ME!!\"";

        Button3Label.text = @"Oh I Will!";
        Button2Label.text = @"Sorry I didnt mean to...";

    }
}

- (IBAction)buttonclick {

}
@end
4

4 に答える 4

19

文字列を。と比較することはできません==。これは、2つの同一の文字列ではなく、まったく同じNSStringオブジェクトである場合にのみ機能します。使用する[buttonLabel.text isEqualToString:@"Hello There!"]

于 2009-07-07T18:38:26.907 に答える
8

あなたが書くとき:

Button2Label.text == @"Hello There!"

ボタンのラベルと静的文字列の間のポインターの同等性をテストしています。ここでは、ポインターの等価性ではなく、文字列の等価性からテストします。

if ([Button2Label.text isEqualToString: @"Hello There!") { ... }

とはいえ、ボタンのラベルに基づいてアクション メソッドで実行時の決定を下すのは設計が不十分であり、ローカリゼーションを含む何らかの理由でボタンのラベルが変更された場合に問題が発生します。

送信者または送信者のタグをオフにすることが推奨されるパターンです。

于 2009-07-07T18:45:29.343 に答える
2

==を使用して文字列を比較することはできません。ポインタを比較するだけです。

試す:

if ([Button2Label.text compare:@"Hello There!"] == NSOrderedSame)

于 2009-07-07T18:39:46.983 に答える
0

ほとんどの場合、if条件が失敗している場合は、条件を否定してその理論をテストしてみてください。突然実行が開始された場合は、ラベルのtextプロパティの値をデバッグしてみてください。

于 2009-07-07T18:37:30.827 に答える