0

私は Xcode を使用して iPhone 用のアプリを作成していますが、Xcode が私を台無しにしていると思い
ますViewController.h...

 @property (weak, nonatomic) IBOutlet UITextField *passwordField;

 @property (weak, nonatomic) IBOutlet UILabel *passwordResult;

 - (IBAction)go:(id)sender;

とでViewController.m

- (void)viewDidLoad {

    A = @"A";

}

- (IBAction)go:(id)sender {

    password = [NSString stringWithFormat:@"%@", _passwordField.text];

    if (password == A) {
         _passwordResult.text = [NSString stringWithFormat:@"%@", A];
         }
   }

入力が大文字の「A」の場合、これは大文字の「A」をラベルに出力するはずですよね?そうでない場合、どうすればよいですか?

注: 入力したフレーズをコピーして印刷するだけではなく、パスワード クラッカー アプリケーションを作成して、それが機能するかどうかを確認したいのです...

4

3 に答える 3

0

それ以外の:

if (password == A)

使用する

if ([password isEqualToString:A])

それ以外の場合は、文字列自体の内容ではなく、ポインターのみを比較しています。

于 2013-01-17T03:31:17.853 に答える
0

文字列の比較には、次を使用します[someString isEqualToString:anotherString]

を使用==すると、両方のポインターが同じ内容のオブジェクトを指しているかどうかではなく、同じオブジェクトを指しているかどうかが比較されます。両方のポインタに同じ文字列が含まれていても、同じオブジェクトを指しているとは限りません。

2 人が同じ車を持っていて、それを解錠するための鍵が同じである場合、両方の鍵は等しくなく、両方の車を開くことはできません。それぞれが作成された車のみを開きます。1 人が車を持っていて、余分なキーを作成している場合、同じ車 (オブジェクト) を開くため、それらは平等です。ポインタはこのように考えることができます。

于 2013-01-17T03:31:36.023 に答える
0

Rickay と trudyscousin が示したように、平等のテストisEqualToString==.

そして - CodaFi と dreamlax が示唆しているように、この行:

 _passwordResult.text = [NSString stringWithFormat:@"%@", A];

A と _passwordResult.text の両方が NSStrings であるため、いくつかの冗長性が含まれているため、中間の NSString を作成する必要はありません。

_passwordResult.text = A;

十分であろう。

他のいくつかの文体の観察...

どこかで iVar "A" を宣言したと思われます。IBOutlets で行ったようにプロパティ宣言を使用し、より適切な名前を付けることをお勧めします。

@property (nonatomic, strong) NSString* aBetterNamedA

オブジェクト内でもアクセサ構文を使用する必要があります。

self.aBetterNamedA
self.passwordResult.txt

(これに対する唯一の例外は、iVar を直接アドレス指定する必要があるinitandメソッドである必要があります)。dealloc

于 2013-01-17T03:53:42.693 に答える