В чем разница между 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:
метод, который проверяет, равны ли сами строки, а не указатели.