0

NSDictionary 内のすべてのキーの配列を配列に取得し、 を使用して並べ替えようとしていますlocalizedCaseInsensitiveCompare。私は最初にやってみました:

NSArray *test = [myDict keysSortedByValueUsingSelector@selector(localizedCaseInsensitiveCompare:)]]; 

私は得続けましNSCFNumber localizedCaseInsensitiveCompare:]: unrecognized selectorた。再確認したところ、(今のところ) 2 つのキーはすべて文字列です。

私はそれを機能させるために行うことに切り替える必要がありました:

NSArray *items = @[[[languages allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]];

何故ですか?!

ありがとう!

4

3 に答える 3

2

この 2 つのケースでは、並べ替えが異なります。

NSArray *test = [myDict keysSortedByValueUsingSelector@selector(localizedCaseInsensitiveCompare:)]];

このバリアントソート(ドキュメントから):

ディクショナリがその値でソートされた場合の順序で、ディクショナリのキーの配列を返します。

最初にセレクターを使用して値をソートし、次にキーのリストを取得する配列を取得しようとします。あなたの辞書のオブジェクトはそうではなくNSString、このセレクターについて何も知らないと思います。

NSArray *items = @[[[languages allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]];

ここであなたは正しいです。キーの配列 ( NSString) を取得し、右セレクターを使用して並べ替えます。

于 2013-07-10T11:41:12.997 に答える
0

keysSortedby **Value** usingSelector...

于 2013-07-10T11:36:00.420 に答える
0

なぜなら、キーではなく値でソートしているため、値として持っているkeysSortedBy**Value**UsingSelectorからです。NSNumberNSNumbers

于 2013-07-10T11:36:22.227 に答える