В чем разница между NSString = @"HELLO" и NSString, получающими ту же строку с помощью initWithContentsOfURL

У меня есть строка, которая получает контент из URL, и когда я пытаюсь использовать его, он не работает так, как я думал.

Когда я инициализирую NSString с содержимым URL, как это:

NSString *strFromURL = [[NSString alloc] initWithContentsOfURL:someURLReturningTextHELLO encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",strFromURL); // returns "HELLO" // as expected

но когда я пытаюсь:

if (strFromURL == @"HELLO") { NSLog(@"IT WORKS"); } // This doesn't happen

Когда я делаю тот же процесс с:

NSString *mySimpleString = @"HELLO";
if (mySimpleString == @"HELLO") { NSLog(@"IT WORKS"); } // This works

Итак, мой вопрос: как я могу получить контент с URL, который я смогу использовать позже в своем заявлении IF?

* Я новичок в Objective-C. Спасибо!

3 ответа

Решение

Когда вы просите if (strFromURL == @"HELLO") вы сравниваете равенство объектов, но не строк. Когда вы вызываете сравнение двух константных строк, это работает, в противном случае не получается, равны ли строки в сравниваемых объектах или нет.

Вызов if ([strFromURL isEqualToString:@"HELLO"]) вместо.

С объектами == оператор проверяет равенство указателей. То есть две переменные одинаковы, если указатели указывают на один и тот же объект. Строка, извлеченная из URL, не является тем же объектом, что и константная строка, поэтому происходит сбой Вы хотите использовать NSString isEqualToString: метод, который проверяет, равны ли сами строки, а не указатели.

Вы можете попробовать сравнить с методом isEqualToString

Другие вопросы по тегам