В чем разница между NSString = @ "HELLO" и NSString, получающими ту же строку с помощью initWithContentsOfURL - PullRequest
1 голос
/ 21 февраля 2011

У меня есть строка, которая получает контент из 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 ]

5 голосов
/ 21 февраля 2011

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

Звоните if ([strFromURL isEqualToString:@"HELLO"]) вместо.

2 голосов
/ 21 февраля 2011

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

1 голос
/ 21 февраля 2011

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

...