2012-03-14 18 views
0

私はテーブルビューで作業していますが、なぜ私のif文が偽であるのか不思議です。 おそらく、本当にシンプルなエラーです。デバッグしたところ、「メッセージ」にはtableviewセルの値が含まれていました。TableView:おそらく単純なエラー

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
NSString *message = [NSString stringWithFormat:@"%@",[tableViewArray objectAtIndex:indexPath.row]]; 
NSString *apple = [NSString stringWithFormat:@"Apple"]; 
if(apple == message) 
..... 

ありがとうございました!

答えて

0

オブジェクトを比較しています。代わりに次のコードを使用したいと思う:

if ([apple isEqualToString:message]) { 
    // ... 
} 
0

まあ、はい、シンプルな、次の2つの異なる変数のアドレスを比較していることを、彼らはあなたが

を使用したコンテンツの比較のために確かに同じ数字が:)ではありません
- (BOOL)isEqualToString:(NSString *)aString 

NSString referenceを慎重に読んでください。また、c言語の基本についての文献もあります。

+0

ありがとうございます。あなたはコードを投稿できますか?私は本当に理解していない!ええと思う、いくつかの基本を学ぶ必要があります:) ありがとう – Seb

+0

Reed Olsenが投稿したコードは完全に正しいです、あなたはメッセージアドレスのNSStringオブジェクトの内容とリンゴのアドレスでNSStringオブジェクトの内容を比較しています新しい変数を宣言しているときに "*"を指定すると、クラスタイプのオブジェクトへのポインタが作成されます。ポインタとメモリ管理に関する多くの情報を一般に見つけることができます。答えを少し修正して、そこに完全なメソッドシグネチャを追加します( "メソッドシグネチャ"がベルを鳴らしていない場合は、実際に追加情報を見つけようとしますが、それは問題ありません。 –

0

messageは、メモリ内のNSStringオブジェクトへのポインタアドレスです。 ==を実行すると、文字列の内容ではなくポインタのアドレスが比較されます。実際のNSStringオブジェクトの内容を比較するには、適切なメソッドisEqualToString:を使用する必要があります。

次の例では、2つの文字列を作成して、同じ内容のポインタアドレスが異なることを示しています。 NSLog()%pは、ポインタアドレスを表示します。

NSString *string1 = [NSString stringWithFormat:@"test"]; 
NSString *string2 = [NSString stringWithFormat:@"test"]; 

NSLog(@"(%p == %p)  => %d", string1, string2, string1 == string2); 
NSLog(@"[string1 isEqualToString:string2] => %d", [string1 isEqualToString:string2]); 

=> 2012-03-14 22:55:07.395 Untitled[2797:707] (0x1099146c0 == 0x109914870)  => 0 
=> 2012-03-14 22:55:07.398 Untitled[2797:707] [string1 isEqualToString:string2] => 1 
関連する問題