2011-08-15 7 views
4

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])]; 
     } 

は誰もが知っていいただきました!違い| |と|もし論理?

+0

将来的に質問を編集して追加情報を提供してください。 –

+0

海は、ありがとう! – wagashi

答えて

1

誰もが違いを知っていますか?と|もし論理?

"|"は使用できません。その場合は、ビット単位のOR演算子です。 "||"ブール論理演算子で、ビットごとに論理和演算子として機能しません。

+1

ありがとうございます。以前のシンボルはいつ使用しますか?さて、論理の場合は後者の記号を使用します。 – wagashi

+1

通常、フラグを操作するときはビット単位の演算子を使用します。 http://www.cprogramming.com/tutorial/bitwise_operators.htmlを見てください。プログラマーが少なくとも読むべきである、徹底的で興味深い記事です。 – JohnBrighton

+0

ありがとうございます! – wagashi