Если вы пытаетесь сравнить строки, используйте один из этих методов. Не пытайтесь изменить данные.
- (NSComparisonResult)localizedCompare:(NSString *)aString
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)aString
- (NSComparisonResult)compare:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)range locale:(id)locale
Вы ДОЛЖНЫ учесть языковой стандарт пользователя, чтобы писать вещи со строками, особенно с именами.
В большинстве языков символы, такие как ä и å, не одинаковы, кроме того, что выглядят одинаково. Они по своей природе являются отличительными символами, значение которых отличается от других, но фактические правила и семантика различны для каждой локали.
Правильный способ сравнения и сортировки строк - с учетом локали пользователя. Все остальное наивно, неправильно и очень 1990-х годов. Хватит это делать.
Если вы пытаетесь передать данные в систему, которая не может поддерживать не-ASCII, ну, это просто неправильная вещь. Передайте его в виде больших двоичных объектов.
https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Strings/Articles/SearchingStrings.html
Плюс сначала нормализуйте ваши строки (см. Пост Питера Хоси), предварительно составив или разложив, в основном выберите нормализованную форму.
- (NSString *)decomposedStringWithCanonicalMapping
- (NSString *)decomposedStringWithCompatibilityMapping
- (NSString *)precomposedStringWithCanonicalMapping
- (NSString *)precomposedStringWithCompatibilityMapping
Нет, это не так просто и легко, как мы привыкли думать.
Да, это требует осознанного и тщательного принятия решений. (и немного опыта не на английском языке помогает)