数组按日期排序,但未按时排序

时间:2012-11-25 11:16:45

标签: objective-c xcode arrays sorting

我在我的字段“date”上对NSMutableArray进行排序,但它没有考虑时间。如果日期相同,则时间仍然是随机排序的。我究竟做错了什么?字段“date”的类型为NSDate。

 NSSortDescriptor *dateDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSArray *descriptors = [NSArray arrayWithObjects:dateDescriptor, nil];

[self.player1ScoreT sortedArrayUsingDescriptors:descriptors];

我的输出是:
2012-11-25 11:01:00 +0000
2012-11-25 11:00:56 +0000
2012-11-25 11:00:54 +0000
2012-11-25 11:01:03 +0000

奇怪.....

2 个答案:

答案 0 :(得分:4)

你用来排序的逻辑是正确的,我只是尝试过它并且工作正常。

我认为这是因为[self.player1ScoreT sortedArrayUsingDescriptors:descriptors];,这将更改self.player1ScoreT中保存的数组,而是生成一个新数组。这是因为你正在使用一个不会改变原始数组的选择器(NSArray本身在设计上是不可变的,NSMutableArray是可变的。)

因此,你会想要使用它:

self.player1ScoreT = [self.player1ScoreT sortedArrayUsingDescriptors:descriptors];

这会将self.player1ScoreT中的数组重新分配为由sortedArrayUsingDescriptors:生成的新排序数组,旧的未排序数组将被丢弃。

答案 1 :(得分:0)

正如WDUK所说,你错过了sortedArray的分配:

id newArray = [oldArray sortedArrayUsing...

我甚至尝试了它并且它包括日期确定包括时间

我试过的代码:

int main(int argc, char *argv[]) {
@autoreleasepool {
    id player1ScoreT = @[@{@"date":[NSDate dateWithTimeIntervalSinceNow:-100]},
                         @{@"date":[NSDate dateWithTimeIntervalSinceNow:-1000]},
                         @{@"date":[NSDate dateWithTimeIntervalSinceReferenceDate:+1000]},
                         @{@"date":[NSDate dateWithTimeIntervalSinceReferenceDate:-50]},
                         @{@"date":[NSDate dateWithTimeIntervalSinceNow:+50]},
                         @{@"date":[NSDate dateWithTimeIntervalSinceNow:+0]}];
    NSLog(@"%@", [player1ScoreT valueForKeyPath:@"date"]);
    player1ScoreT = [player1ScoreT sortedArrayUsingDescriptors:@[[[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES]]];
    NSLog(@"%@", [player1ScoreT valueForKeyPath:@"date"]);
}
}