0

次のコードを実行して、配列を最も早く終了する順序で並べ替えています(expiry_dateから[NSDate date](現在)に最も近い)。

ただし、コンパレータを実行しても、アレイにはまったく影響がなく、すべてのオブジェクトが現在の位置を保持します。どこが悪いのか教えていただけますか?

[self.questions sortUsingComparator:^NSComparisonResult(NSDictionary * question1, NSDictionary *question2) {

     NSDate* dateq1 = [NSDate dateWithTimeIntervalSinceNow:[[question1 objectForKey:@"expiry_date"] floatValue]];
     NSDate * dateq2 = [NSDate dateWithTimeIntervalSinceNow:[[question2 objectForKey:@"expiry_date"] floatValue]];

     NSComparisonResult result = [dateq1 compare:dateq2];

     NSLog(@"%@", result == NSOrderedAscending ? @"ASC" : result == NSOrderedDescending ? @"DESC" : @"SAME");

     return result;

}];

NSLog()は次を返します。

DESC
DESC
ASC

dateq2代わりに比較を逆にしようとしましたがdateq1、その逆も同様ですが、戻り値が変更されても、配列は変更されません。

4

2 に答える 2

1

それは私には機能しているように見えますが(出力から判断すると)、おそらくこれはより簡潔であり、したがってエラーが発生しにくいですか?

NSArray* unsorted;
NSSortDescriptor* descriptor = [NSSortDescriptor sortDescriptorWithKey: @"expiry_date" ascending: NO];
self.questions = [unsorted sortedArrayUsingDescriptors: @[ descriptor ] ];
于 2012-08-14T15:51:15.353 に答える
0

ソートは新しい配列を返します。レシーバーが変わるとは思いません。あなたが課題をしているのかどうかわかりません。

于 2012-08-14T16:32:13.533 に答える