为什么JSON返回的NSString和字符串不相等,尽管两者都包含相同的值

时间:2012-01-03 13:51:08

标签: objective-c xcode json encoding nsstring

当我将值分配给银行:banca.name = @"CheBanca!";时,以下条件返回true。

if(banca.name==@"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收到的字符串不相等,尽管它们包含相同的短语。如何使它们等于在条件下返回真实。

3 个答案:

答案 0 :(得分:3)

要准确比较字符串,您应该使用isEqualToString方法。

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

答案 1 :(得分:2)

要检查两个字符串之间是否相等,请使用isEqualToString:

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

您之前的代码(if (banca.name == @"CheBanca!") {)仅检查指针地址是否相等。

详细了解NSString班级here

答案 2 :(得分:1)

这里的问题是NSString*是指向NSString的指针,因为它们是通过不同的方式加载的,它们是两个不同的NSString并且有两个不同的地址。 ==比较地址,因此将它们视为不同。

要比较字符串的值,请使用compare:以及NSStringisEqualToString:方法的相关方法