Если оператор проверяет равенство NSString, используя == - PullRequest
1 голос
/ 14 февраля 2011

Я делаю серверный вызов в каком-то коде Objective-c.Если он вернется как @"yes", он выполнит действие.По какой-то причине часть // DO ACTION HERE никогда не достигается.

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSString *returnStringResults = returnString;
NSString *yesText = @"yes";

if (returnStringResults == yesText) {
    testLabel.text = @"Success";
    // DO ACTION HERE
}

Ответы [ 2 ]

8 голосов
/ 14 февраля 2011
if ([returnStringResults isEqualToString:yesText]) {
    testLabel.text = @"Success";
    // DO ACTION HERE
}

Редактировать: Как указал bbum, NSString *returnStringResults = returnString; ничего не делает.

Так что, действительно, удалите эту строку и используйте

if ([returnString isEqualToString:yesText]) {
    testLabel.text = @"Success";
    // DO ACTION HERE
}
2 голосов
/ 14 февраля 2011

Вы сравниваете адреса указателей. Способ работы этого кода yesText и returnStringResults - это указатели на разные экземпляры NSString, поэтому указатели не равны. Вы должны использовать метод NSString isEqualToString для сравнения.

...