Это потому, что 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. Я добавил этот вопрос, чтобы больше не повторять эту ошибку.