Я пытаюсь сравнить равенство двух многострочных строк. Я получаю одну из строк из веб-службы, а другую - из iTunes через мост сценариев. Строки из веб-службы в конечном итоге переносятся в iTunes, поэтому, если я сделаю это, а затем проведу повторное сравнение строк, в идеале они будут идентичны.
Однако при сравнении таких строк кажется, что isEqualToString: всегда возвращает неравенство. Я проверяю это, проверяя равенство строки из iTunes, которая исходила от веб-службы, и строки непосредственно из веб-службы.
Запись обеих строк в консоль приводит к выводу обеих строк, которые выглядят одинаково. Регистрация длин строк дает одинаковую длину.
Я также пытался сравнивать строки, используя некоторые другие методы. Например, я преобразовал их в строки ASCII, чтобы убедиться, что это не проблема Unicode:
NSData *iTunesStringData = [[self iTunesString] dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSData *webServiceStringData = [[self webServiceString] dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSString *newiTunesString = [[[NSString alloc] initWithData:iTunesStringData encoding:NSASCIIStringEncoding] autorelease];
NSString *newWebServiceString = [[[NSString alloc] initWithData:webServiceStringData encoding:NSASCIIStringEncoding] autorelease];
BOOL result = [newiTunesString isEqualToString:newWebServiceString];
Та же проблема, не равная. Я попытался сравнить только первый символ:
NSComparisonResult result = [newiTunesString compare:newWebServiceString
options:NSLiteralSearch
range:NSMakeRange(0,1)
locale:[NSLocale currentLocale]];
Не возвращает NSOrderedSame. Я записал эти первые символы в консоль, и они кажутся идентичными. Я также рассмотрел различия в возврате каретки и попытался заменить @ "\ r" на @ "" в обеих строках перед сравнением, что не работает (и, кроме того, это не должно влиять на равенство только первого символа). Я не хочу удалять символы @ "\ n", потому что хочу сохранить несколько строк.
Что происходит? Есть другие идеи?