Почему этот код не распознает строку NSString как равную? - PullRequest
1 голос
/ 24 декабря 2011

Это код, который у меня есть:

NSLog(@"name: %@", name);
    NSLog(@"service: %@", service.name);
    if (name == service.name) {
        NSLog(@"Test");
    }

Имя - "Эндрю Макбук Про".Служба "Andrew's MacBook Pro"

И все же я не получаю "Тест" от NSLog.Есть идеи, почему это может быть?

Ответы [ 4 ]

18 голосов
/ 24 декабря 2011

использование [string isEqualToString:@"any string"]

Смотрите очень полезное обсуждение здесь: Понимание сравнения строк NSS

7 голосов
/ 24 декабря 2011

Для сравнения строк используйте [name isEqualToString:service.name]

Использование == сравнит, чтобы увидеть, указывают ли оба указателя на один и тот же объект, а не если они указывают на объекты с одинаковым содержимым. Даже если оба указателя содержат одну и ту же строку, это не означает, что они указывают на один и тот же объект.

Если два человека имеют одинаковую машину и имеют один и тот же ключ для разблокировки, оба ключа не равны и не открывают обе машины; каждый откроет только ту машину, для которой он был сделан. Если у одного человека есть машина, но у него есть дополнительный ключ, они равны, потому что они открывают ту же машину (объект). Вы можете думать об указателях таким образом.

6 голосов
/ 24 декабря 2011

Вы сравниваете два объекта, а не две строки. Попробуйте [string isEqualToString:@"another string"].

1 голос
/ 26 декабря 2011
In Objective C use [string1 isEqualToString:@"string2"]; for string comparison.

Here is the code :

NSLog(@"name: %@", name);
NSLog(@"service: %@", service.name);
if ([name isEqualToString:service.name])
    NSLog(@"Strings are Equal");
else
    NSLog(@"Strings are Not Equal");   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...