データはブロックに格納されるためNSArray
、ブロックを使用してソートを行うことができます。このブロックは、ソート記述子でコンパレーターとして認識されます。このアプローチは、基になるデータベースに格納されているプロパティ値に基づいて直接ソートする、SQLite を使用したコア データ フェッチでは機能しないことに注意してください。
これにはいくつかの方法がありますが、これは単純で、歩行者に隣接しています (データ構造が正しいことを願っています)。
NSArray *data = @[
@{@"otherobjects":[NSSet setWithObjects: @{@"num":@2}, @{@"num":@1}, @{@"num":@4}, nil]},
@{@"otherobjects":[NSSet setWithObjects:@{@"num":@7}, @{@"num":@9}, @{@"num":@8}, nil]}
];
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"otherobjects" ascending:NO comparator:^NSComparisonResult(id obj1, id obj2) {
NSNumber *n1 = [[obj1 anyObject] valueForKey:@"num"];
NSNumber *n2 = [[obj2 anyObject] valueForKey:@"num"];
return [n1 compare: n2];
}];
NSArray *sorted = [data sortedArrayUsingDescriptors:@[sd]];
凝りたい場合は、2 つのオブジェクトを比較するメソッドをカスタム オブジェクトに実装し、そのメソッドを使用して並べ替え記述子を作成するか、たとえば、オブジェクトの最大値または最小値を返す読み取り専用プロパティを宣言することができます。NSSet
、そのプロパティで通常のソート記述子を使用するだけです。