2011-10-18 1 views
1

は私が http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html%23//apple_ref/doc/uid/20000132-SW5Objective-Cのノルウェーのアルファベットæå、NSArrayのsortedArrayUsingSelectorø:問題

を読んだことがあるしかし、私は私の問題への解決策を見つけることができませんでした。

Iが書いた:

NSArray *sorted = [unsorted sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

はÆおよびO. うち、O-うちAでソート順AZを示すIローカライズを使用するので、AZ-AE-O-Åであることが想定される

答えて

4

は、一般ユーザのように、特定の動作のためにロケールを強制するための良い方法であるとは考えられませんデータのソート方法を設定する必要があります。たとえば、言語クラスや意図的に二重言語のプログラムを使用している場合は、プログラムの特定の要素だけを並べ替えることがユーザーにとって便利な場合があります。あなたが特定の文字列は、常に特定のロケールの順序でソートされている、あなたは比較の長い形式を使用する必要があることを確認する必要がある場合には、もう少し作業だが:

- (NSComparisonResult)compare:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)range locale:(id)locale 

あなたはロケールを取得することができます呼び出しを使用して、ノルウェー:

NSArray *sorted = [unsorted sortedArrayUsingComparator :^(id obj1, id obj2) { 
    NSRange theRange = NSMakeRange(0, [obj1 length]); 
    return [obj1 compare: obj2 options: NSCaseInsensitiveSearch range: theRange locale: noLocale]; 
}]; 

これはプログラムの残りの部分のためのデフォルト言語を設定していないだろうが、それは明示的にspecifを使用します。

NSLocale *noLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"no_NO"] autorelease]; 

だから、あなたが呼び出してしまうと思いますその特定の比較においてロケールを使用する。

+0

このメソッドは何をしますか? enを永久に変更しないでください。それとも一時的に?今はコンピュータがありませんが、明日あなたのコードをチェックします。私を助ける時間をとってくれてありがとう。 – wagashi

+0

私は願わくは明確な説明をするために私の回答を編集しました。これは特定の比較のためだけにロケールを「いいえ」にします。 – gaige

+0

今それはクリアです:)ありがとう。 – wagashi

0

Iは-viewDidLoadこの行を挿入することによってそれを解決:アプリケーション全体のユーザの言語を上書き

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"no"] forKey:@"AppleLanguages"]; 
関連する問題