我对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 中对数据进行排序?
谢谢。
您的日期格式与您使用的日期字符串不匹配。
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];
}];