我正在尝试搜索我的应用。如果你在搜索栏中写了一个确切的单词,那就没关系,但是例如,如果我想找到“书”而我输入“böök”变音符应该无关紧要。我使用下面的代码,但它没有用,也在搜索时失败,例如“纽约 - Björk”。我也尝试了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];
}
}
答案 0 :(得分:4)
如果您正在使用Core Data,则可以使用以案例和变音符号不敏感方式搜索的NSPredicate。如果您在比较过程中添加[cd]
,则this question中的答案会执行不区分大小写的搜索。 contains[cd]
或==[cd]
,然后它将执行案例和变音符号不敏感搜索。
答案 1 :(得分:2)
事实上,你可以这样做:
NSPredicate * predicate = [NSPredicate predicateWithFormat:@“Names CONTAINS [cd]%@”,searchText];
searchArray = [[listOfItems filteredArrayUsingPredicate:predicate] mutableCopy];
因为NSPredicate可以忽略unicode,所以searchArray就是你想要的。
答案 2 :(得分:1)
您是否尝试过使用现有代码并替换
的所有实例NSCaseInsensitiveSearch
与
NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch|NSWidthInsensitiveSearch
?这似乎可以以最直接的方式解决您的问题。
如果您希望böök
匹配book
但不匹配,请参阅this answer以了解消除{{1}的变音符号的方法在搜索之前。但这很容易出错,而且可能不是你真正想做的事情。