为什么NSString比较:当字符串不同时返回NSOrderedSame?

时间:2009-06-10 15:26:46

标签: objective-c

为什么比较返回NSOrderedSame?:

NSString *testString = [anObject aString];

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

注意:我添加了这个问题,所以我不会再犯这个错误(因此我给出了直接答案)。

2 个答案:

答案 0 :(得分:10)

这是因为testString可以等于nil。向nil发送消息会返回nilNSOrderedSame等于00等于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。