2012-01-03 6 views
1

銀行に値を割り当てると、次の条件がtrueを返します。JSONによって返されるNSStringと文字列が同じ値であるにもかかわらず、同じ値ではない理由

if([email protected]"CheBanca!"){ 
     header.bankNameLabel.textColor=[UIColor greenColor]; 
} 

しかし、私は同じ値を割り当てるとき:banca.name = [jsonBanca objectForKey:@"nome_banca"];NSLog(@"Bank name: %@", [jsonBanca objectForKey:@"nome_banca"]);が値を出力するが、条件がfalseを返すには、Bank name: CheBanca!

次のコードは、私がjsonBanca取得する方法を示しています。

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
[responseData release]; 

NSDictionary *results = [responseString JSONValue]; 
[responseString release]; 

NSArray *jsonBanche = [results objectForKey:@"banche"]; 
NSLog(@"%@",jsonBanche); 
NSMutableArray *banks = [NSMutableArray arrayWithCapacity:jsonBanche.count]; 

for (int i=0; i<jsonBanche.count; ++i) { 

     NSDictionary *jsonBanca = [jsonBanche objectAtIndex:i]; 
} 

このコードNSLog(@"%@",jsonBanche);銀行を返す:

{ 
    "nome_banca" = "CheBanca!"; 
    "nome_prodotto" = "Conto Deposito"; 
    rating = "A-1"; 
}, ... 

質問はなぜこの2つの文字列@ "CheBanca!" JSONが受け取る文字列は、同じフレーズを含んでいても等しくありません。そしてそれらを条件に真を返すように等しくする方法。

+0

可能な複製[2つのNSStringオブジェクトを比較すると "a == b"がfalseの場合?](http://stackoverflow.com/questions/8598599/if-ab-is-false-when-comparing-two- nsstring-objects) – Mark

答えて

3

compare:と関連した方法を使用して比較するため

、あなたはisEqualToStringメソッドを使用する必要があります。

if ([banca.name isEqualToString:@"CheBanca!"]) { 
    // strings match 
    header.bankNameLabel.textColor=[UIColor greenColor]; 
} 
1

NSString*NSStringへのポインタであり、別々の方法で読み込まれて2つの異なるアドレスがあり、2つの異なるアドレスを持つためです。 ==はアドレスを比較するため、異なるアドレスと見なされます。文字列の値が正確に文字列を比較するにはNSStringまたはisEqualToString:方法

+0

compare:の使用は、等しいかどうかをチェックするだけで、過度のことです。 – Guillaume

2

あなたの前のコード(if (banca.name == @"CheBanca!") {)はポインタのみのアドレスの平等のためにチェックしていたisEqualToString:

if ([banca.name isEqualToString:@"CheBanca!"]){ 
    header.bankNameLabel.textColor = [UIColor greenColor]; 
} 

を使用し、二つの文字列間の等価性をチェックするには。

NSStringクラスhereの詳細を確認してください。

関連する問題