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 回答