This is counterintuitive, but the argument rangeapplies only to the recipient. The length of the other line (argument compare:) is not limited by the range. Your call reduces @"th"to the range {0,2} that it produces @"th"(ie It doesn’t work), and then compares it to @"They".
You will see that it is:
NSComparisonResult comp = [@"They" compare:@"th"
options:NSCaseInsensitiveSearch
range:NSMakeRange(0, 2)];
BOOL areTheSame = comp == NSOrderedSame;
, (@"They") ( @"th"), .