Почему NSString сравнивает: возвращает NSOrderedSame, если строки разные? - PullRequest
3 голосов
/ 10 июня 2009

Почему сравнение возвращает NSOrderedSame?:

NSString *testString = [anObject aString];

if ([testString compare:@"a string which doesn't equal testString"] == NSOrderedSame) {
    //do stuff
}

Примечание: я добавил этот вопрос, чтобы больше не повторять эту ошибку (отсюда и немедленный ответ).

Ответы [ 2 ]

10 голосов
/ 10 июня 2009

Это потому, что testString может равняться nil. Отправка сообщения на nil возвращает nil. NSOrderedSame равно 0, а 0 равно nil.

NSLog(@"nil == NSOrderedSame = %d", (nil == NSOrderedSame)); //nil == NSOrderedSame = 1
NSLog(@"[nil compare:@\"arf\"] == nil = %d", ([nil compare:@"arf"] == 0));    //[nil compare:@\"arf\"] == nil = 1

Чтобы избежать этого, убедитесь, что объект не nil перед сравнением, например:

if (testString != nil && [testString compare:@"testString"] == NSSOrderedSame) ...

NB. Я добавил этот вопрос, чтобы больше не повторять эту ошибку.

5 голосов
/ 10 июня 2009

Вероятно, [anObject aString] возвращает nil, отправка nil сообщения возвращает 0 и 0 == NSOrderedSame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...