1

アプリの検索を実装しようとしています。検索バーに正確な単語を入力すれば問題ありませんが、たとえば「本」を検索して「böök」と入力した場合、発音区別符号は関係ありません。私は以下のコードを使用していましたが、それは役に立たず、たとえば「ニューヨーク-ビョーク」の検索中にも失敗します。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];
  }
}
4

3 に答える 3

4

Core Dataを使用している場合は、発音区別符号に依存しない方法で大文字と小文字を区別して検索するNSPredicateを使用できます。この質問の回答は、大文字と小文字を区別しない検索を実行しています。たとえば、または[cd]の比較の一部として追加すると、大文字と小文字を区別しない検索が実行されます。contains[cd]==[cd]

于 2012-07-14T09:44:09.780 に答える
2

実際、次のようにすることができます。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Names CONTAINS[cd] %@",searchText];

searchArray = [[listOfItemsfilteredArrayUsingPredicate:predicate] mutableCopy];

NSPredicate は unicode を無視できるため、searchArray が必要です。

于 2012-08-15T03:38:13.287 に答える