2012-11-25 44 views
2

我在我的字段“日期”上排序NSMutableArray,但它没有考虑到时间。如果日期相同,则时间仍然是随机排序的。我究竟做错了什么? “日期”字段的类型是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时零零分56秒+0000
2012年11月25日11:00: 54 +0000
2012年11月25日11时01分03秒+0000

奇怪.....

回答

4

你使用排序的逻辑是正确的,我只是试着它,它工作正常。

我想这是因为[self.player1ScoreT sortedArrayUsingDescriptors:descriptors];,这将变化self.player1ScoreT保持在阵列,相反,它会产生一个新的数组。这是因为您使用的选择器不会改变原始数组(NSArray本身不能被设计为可变,NSMutableArray是可变的)。

因此,您需要使用此:

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

这将重新分配阵列内self.player1ScoreT成为新的排序阵列,通过sortedArrayUsingDescriptors:生产,老未分类的人会被丢弃。

+0

是你错过了任务 - 忽略了 - 我甚至尝试过排序我自己不相信这个:D谢谢 –

+0

Thanx!这样可行! – RobertvdBerg

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"]); 
} 
} 
+0

thanx!这确实是...... – RobertvdBerg