Почему NSString и строка, возвращаемые JSON, не равны, хотя оба содержат одно и то же значение - PullRequest
1 голос
/ 03 января 2012

Когда я присваиваю значение банку: 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, не равны, хотя они содержат одну и ту же фразу.И как сделать их равными, чтобы вернуть true в условии.

Ответы [ 3 ]

3 голосов
/ 03 января 2012

Для точного сравнения строк следует использовать метод isEqualToString.

if ([banca.name isEqualToString:@"CheBanca!"]) {
   // strings match
   header.bankNameLabel.textColor=[UIColor greenColor];
}
2 голосов
/ 03 января 2012

Чтобы проверить равенство между двумя строками, используйте isEqualToString:

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

Ваш предыдущий код (if (banca.name == @"CheBanca!") {) проверял только равенство адреса указателя.

Подробнее о NSString классе здесь .

1 голос
/ 03 января 2012

Проблема здесь в том, что NSString* является указателем на NSString, так как они загружаются разными способами, они являются двумя разными NSString с и имеют два разных адреса. == сравнивает адреса и поэтому видит их как разные.

Для сравнения значений строки используйте сравнение : и связанные методы NSString или isEqualToString: method

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...