我在我的字段“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
奇怪.....
答案 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"]);
}
}