-3

私は以下のコーディングをしています。条件がTRUEの場合は確認していますが、それに入ることができません。NSLog を使用して、ステップの前後に値と長さを if ステートメントに書き込むことで証明します。両方とも「テスト」と長さ = 4 に等しく、誰でも私の問題を解決できますか?

そして、私のキャップ画面である以下のリンクを見てください、助けてください、ありがとう!!!!

http://postimage.org/image/rvtxcq1g1/

NSLog(@"Before value=%@, lenght=%i", txtMaster.text, [txtMaster.text length]);

if (txtMaster.text == @"test")
{
   NSLog(@"%@\n", @"Success");
}

NSLog(@"After value=%@, lenght=%i", txtMaster.text, [txtMaster.text length]);
4

2 に答える 2

5

s を比較するために使用==するとNSString、文字列のポインター値が比較されます。それはおそらくあなたが望むものではありません。代わりに、これを試してください:

if([txtMaster.text isEqualToString:@"test"]) {
    NSLog(@"Success!\n");
}
于 2012-04-07T05:15:26.867 に答える
1

おそらく、ポインターについていくつかの質問があります。

@"test" は、定数文字列がメモリ内のどこに存在するかを示すポインターを返します。

  • @"テスト" = 0xC0001. 0xC0001 アドレスでは、定数文字列 @"test" です。
  • txtMaster.text = 0xD3401. 0xD3401 アドレスではオブジェクトです (おそらく NSString)

まれに @"test" と txtMaster.text が等しい (==) 場合、それはつまり

  • txtMaster.txt = @"test" = 同じアドレス = 0xd32901 で、同じオブジェクトを指しています。

Objective-C オブジェクトを返すすべてのメソッドは、通常、それらのオブジェクトのポインターを返すことを覚えておいてください。

霧が今去っていることを願っています..

于 2012-04-07T10:10:54.463 に答える