2011-07-05 4 views
0

私はNSDictionnaryの配列を持っており、int値でキーを並べ替えたいと思います(キーの名前は "age"です)。 例:iOS上のsortedArrayWithSelectorとNSDictionnary

Dic1:年齢= 30、性別=男性; Dic2:年齢= 24、性別=男性;

アレイ:Dic1、Dic2;

今すぐ比較する方法を私が持っているリクます:

アレイ:Dic2、Dic1。

私は多くのことを試しましたが、うまくいきません。 I NSSortDescriptorを使用するなどが、それはiOSの4.0 :(

はあなたが解決策を持っていることからのみ利用可能です おかげ

EDIT:?!

私はNSDictionaryのカテゴリの比較方法を書いた:

- (NSComparisonResult)compareGood:(NSDictionary *)otherObject 
{ 
    return [[self objectForKey:@"age"] compare:[otherObject objectForKey:@"age"]]; 
} 

しかし、私はこのクラッシュエラーがあります:キャッチされない例外 'NSInvalidArgumentException'のためにアプリケーションを終了します、理由: '* - [NSCFNumber compare:]:nil argument'

答えて

2

NSSortDescriptorのドキュメントは言う:iOSの2.0以降で利用可能

を。

NSMutableArrayメソッド-sortUsingDescriptors:と同様です。あなたはこれを行うことができるようになります。

NSSortDescriptor *descriptor = [[[NSSortDescriptor alloc] initWithKey:@"age" 
                  ascending:YES] 
                  autorelease]; 
[myArray sortUsingDescriptors:[NSArray arrayWithObject:descriptor]; 

や、myarrayのが変更可能でない場合、二行目のためにこれを行う:

NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]]; 
+0

sortDescriptorWithKey:昇順:とsortedArrayUsingDescriptorは、iOS 4.0以降にのみ使用可能です。しかし、私は今sortUsingDescriptorsを使っています:and initWithKey:ascending: – Pierre

+0

良い点 - '-initWithKey:ascending:'を使用するようにサンプルを更新しました。 – Caleb