Обратите внимание, что если вы используете characterAtIndex:
для доступа к отдельным символам, составные символы будут разбиты на отдельные компоненты, такие как диакритический знак.
Диакритический знак в Unicode-говорит, например, акцент, как в "é" в вашей строке гласных.
Лучший способ - перебрать строку по составным символам:
// A string with composed diacritic characters
// In clear text it is "Renée Ångström"
NSString *stringWithComposedChars = @"Rene\u0301e A\u030Angstro\u0308m";
NSString *vowels = @"aeiouàèìòùáéíóúäëïöü";
NSMutableString *consonants = [NSMutableString string];
[stringWithComposedChars
enumerateSubstringsInRange:NSMakeRange(0,[stringWithComposedChars length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock: ^(NSString *substring,NSRange rng1, NSRange rng2, BOOL *stop)
{
if ( [vowels rangeOfString:substring options:NSCaseInsensitiveSearch|NSWidthInsensitiveSearch].location == NSNotFound ) {
[consonants appendString:substring];
}
}];
NSLog(@"Original string: \"%@\" - Vowels removed: \"%@\"", stringWithComposedChars, consonants);
Вы увидите, что этот фрагмент очищает исходную строку составленных символов как для основного гласного, так и для диакритического знака.