我遇到了排序nsdate数组的问题。 所以我在nsmutablearray中有日期数组
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSArray *arrString = [[NSArray alloc] initWithObjects:@"2012-05-01", @"2012-02-01", @"2012-22-03", @"2012-05-01", @"2012-15-01", nil];
NSMutableArray *arrDate = [[NSMutableArray alloc] initWithCapacity:arrString.count];
for (NSString *item in arrString) {
NSDate *date = [dateFormatter dateFromString:item];
[arrDate addObject:date];
}
正如我在许多情况下看到的那样,他们使用这样的代码对数组进行排序:
NSArray *sortedArray = [arrDate sortedArrayUsingComparator:^(id firstObject, id secondObject) {
return [((NSDate *)firstObject) compare:((NSDate *)secondObject)];
}];
我试图将我的阵列放在上面,但没有奏效。 任何人都可以帮助我如何最好地排序nsmutablearray包含nsdate。我想把最新的日期放在索引数组的顶部。
所以真正的问题是,我如何在arrDate中对数据进行排序?
谢谢。
答案 0 :(得分:1)
您的日期格式与您使用的日期字符串不匹配。
yyyy-MM-dd hh:mm:ss
表示您提供的日期应如下所示:
2012-05-09 15:54:21
^^ Day
^^ Month
即。你的字符串缺少小时,分钟和秒,你有一些月份22和月15的日期。如果日期格式化程序无法解析日期,我认为它返回nil这意味着你试图把nil放入一个数组,这将导致异常。
修改强>
要对日期进行实际排序,您的示例代码看起来没问题,除非您最先想要的是最近的,所以反转compare:
NSArray *sortedArray = [arrDate sortedArrayUsingComparator:^(id firstObject, id secondObject) {
return [secondObject compare: firstObject];
}];
或者使用可变数组,您可以进行排序:
[arrDate sortUsingComparator:^(id firstObject, id secondObject) {
return [secondObject compare: firstObject];
}];