2012-01-03 73 views
1

當我將值賦給bank時:banca.name = @"CheBanca!";以下條件返回true。爲什麼由JSON返回的NSString和字符串不相等,雖然兩者都包含相同的值

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

但是,當我給你相同的值:banca.name = [jsonBanca objectForKey:@"nome_banca"];條件返回false雖然NSLog(@"Bank name: %@", [jsonBanca objectForKey:@"nome_banca"]);輸出值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"; 
}, ... 

問題是爲什麼這兩個字符串@「CheBanca!」和JSON收到的字符串不相等,儘管它們包含相同的短語。並且如何讓它們在條件下等於返回true。

+0

可能的重複[如果比較兩個NSString對象時「a == b」爲false?](http://stackoverflow.com/questions/8598599/if-ab-is-false-when-comparing-two- nsstring-objects) – Mark 2012-01-03 14:04:45

回答

3

要準確地比較字符串,你應該使用isEqualToString方法。

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

這裏的問題是NSString*是一個指向NSString的指針,因爲它們是通過不同的方式加載的,它們是兩個不同的NSStrings並且有兩個不同的地址。 ==比較地址,並將它們視爲不同。

比較字符串的值使用的NSStringcompare:和相關方法或isEqualToString:方法

+0

使用compare:在檢查相等時是否過分。 – Guillaume 2012-01-03 14:04:51

2

要檢查兩個字符串之間的平等,使用isEqualToString:

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

你以前的代碼(if (banca.name == @"CheBanca!") {)只檢查指針的地址的平等。

獲取有關NSStringhere的更多詳細信息。

相關問題