Intereting Posts
genstrings только находят 5 из примерно 100 экземпляров NSLocalizedString Ошибка вычисления процента загрузки NSTimeInterval vs NSDateComponents для универсального контроллера представления времени ввода SDWebImage получить все сохраненные url Как добавить объекты UIColor в NSMutableArray в iOS iPhone NSDateFormatter Преобразует строку Заголовка заголовка UICollectionView xib не отображается Ошибка: «Вложенная поп-анимация может привести к повреждению навигационной панели» Счет NSHashTable неправильно сообщает непустую использование регулярного выражения в объекте C iOS: цель Как получить одно изображение за раз, чтобы светиться, поскольку пальцы перетаскиваются над каждой из серий изображений Попытка представить MPMoviePlayerViewController во время презентации. Ошибка iOS UIScrollView setScrollEnabled UITableView слайд не редактируемые строки с редактируемые строки Xcode iPhone Как я могу добавить сборщик времени в мобильное приложение JQuery?

Как игнорировать символ Юникода во время поиска?

Я пытаюсь выполнить поиск своего приложения. Если вы пишете точное слово в строке поиска, это нормально, но, например, если я хочу найти «книгу», и я набираю «böök» diacritics, это не имеет значения. Я использовал код ниже, но он не полезен и также не работает при поиске, например, «Нью-Йорк – Бьорк». Я также пробовал разные комбинации searchEditedText, но код стал отвратительным. Как я могу это сделать?

NSString *searchText = [searchBar.text capitalizedString]; NSString *searchEditedText=[searchBar.text capitalizedString]; NSMutableArray *searchArray = [[[NSMutableArray alloc] init] autorelease]; for (NSDictionary *dictionary in listOfItems) { NSArray *array = [dictionary objectForKey:@"Names"]; [searchArray addObjectsFromArray:array]; } searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"u" withString:@"ü"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"c" withString:@"ç"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"U" withString:@"Ü"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"C" withString:@"Ç"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"o" withString:@"ö"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"O" withString:@"Ö"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"g" withString:@"ğ"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"G" withString:@"Ğ"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"s" withString:@"ş"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"S" withString:@"Ş"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"i" withString:@"ı"]; searchEditedText = [searchEditedText stringByReplacingOccurrencesOfString:@"İ" withString:@"I"]; for (NSString *sTemp in searchArray) { NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; NSRange titleResultsRange2 = [sTemp rangeOfString:searchEditedText options:NSCaseInsensitiveSearch]; if (titleResultsRange2.length > 0 || titleResultsRange.length > 0) { [copyListOfItems addObject:sTemp]; } } 

Если вы используете базовые данные, вы можете использовать NSPredicate, который ищет в случае и диакритическую нечувствительность. Ответы в этом вопросе выполняются без учета регистра, если вы добавите [cd] качестве части сравнения, например, contains[cd] или ==[cd] , тогда он выполнит случайный и диакритический бесчувственный поиск.

Фактически, вы могли бы сделать так:

NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "Имена CONTAINS [cd]% @", searchText];

searchArray = [[listOfItems filterArrayUsingPredicate: предикат] mutableCopy];

Поскольку NSPredicate может игнорировать unicode, тогда searchArray – это то, что вы хотите.

Вы пытались просто взять ваш существующий код и заменить все экземпляры

 NSCaseInsensitiveSearch 

с

 NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch|NSWidthInsensitiveSearch 

? Похоже, что это решит вашу проблему самым прямым образом.

Если вы хотите, чтобы böök соответствовал book но не наоборот, тогда посмотрите на этот ответ , чтобы böök диакритические метки от böök прежде чем искать его. Но это подвержено ошибкам и, вероятно, не то, что вы действительно хотите сделать в любом случае.