NSComparisonResultを使用して配列を検索していますが、NSDiacriticInsensitiveSearchを使用すると、åæøのようなスカンジナビア語のアルファベットはすぐに見つかりませんが、 NSDiacriticInsensitiveSearch in options:では、検索バーはすぐにåæφを見つけることができますが、àなどは無視します。iPhone:NSComparisonResultとNSDiacriticInsensitiveSearchの問題点スカンジナビア語の文字
これに解決策はありますか?
EDIT 15 Aug: NSSTannerを使用していると思いますが、検索ストリングでåæφを検出するロジックがあれば、それが存在する場合はNSScannerを使用していますが、nsdiactricinsensitivesearchはありません。 searchstringにåæφがない場合は、nscomparisonresultにnsdiactricinsensitivesearchを含めます。私はこれをすぐに実装しようとし、これがうまくいくかどうかをフィードバックします。
マイコード:
NSComparisonResult result;
NSString *setext = searchText;
NSScanner *scanner = [NSScanner scannerWithString:setext];
NSString *a = @"å";
while ([scanner isAtEnd] == NO)
{
if ([scanner scanString:a intoString:NULL])
{
[scanner scanUpToString:a intoString: NULL];
result = [mystr compare:searchText options:(NSCaseInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
}
else
{
result = [mystr compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
}
}
しかし、JohnBrighton'sソリューションの私の修正よりも少し遅いです:
NSComparisonResult result;
NSString *string = searchText;
NSRange range = [string rangeOfString:@"æ"];
NSRange range2 = [string rangeOfString:@"ø"];
NSRange range3 = [string rangeOfString:@"å"];
if (range.location != NSNotFound || range2.location != NSNotFound || range3.location != NSNotFound)
//if ((range.location != NSNotFound) | (range2.location != NSNotFound) | (range3.location != NSNotFound)) {
{
result = [mystr compare:searchText options:(NSCaseInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
}
else {
result = [mystr compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
}
が
は誰もが知っていいただきました!違い| |と|もし論理?
将来的に質問を編集して追加情報を提供してください。 –
海は、ありがとう! – wagashi