为什么比较返回NSOrderedSame?:
NSString *testString = [anObject aString];
if ([testString compare:@"a string which doesn't equal testString"] == NSOrderedSame) {
//do stuff
}
注意:我添加了这个问题,所以我不会再犯这个错误(因此我给出了直接答案)。
答案 0 :(得分:10)
这是因为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) ...
注意:我添加了这个问题所以我不会再犯这个错误了。
答案 1 :(得分:5)
可能[anObject aString]返回nil,发送nil消息返回0,0 == NSOrderedSame。