views:

142

answers:

1

Hello,

I'm compairing two strings. There are equal. isEqualToString: returns NSOrderedDescending.

I thought isEqualToString: would return NSOrderedSame. Can someone explain to me why this happens?

example case...

 NSString *myString = @"1";

 if ( [myString isEqualToString:@"1"] == NSOrderedSame ) {
    // is NSOrderedSame
 }

Since writing the question I know I should use instead compare:. It will return NSOrderedSame. But I would like to know, still, why this happens.

Thanks
Ross

+4  A: 

It doesn't return NSOrderedDescending, it returns YES. Check the return type of that method!

- (BOOL)isEqualToString:(NSString *)aString

NSOrderedDescending is an NSComparisonResult, and happens to have a value of 1 due to its declaration:

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};
typedef NSInteger NSComparisonResult;

Don't mix and match types!

Carl Norum
oh. right. sorry. thanks.
Ross