0

我遇到了排序 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 中对数据进行排序?

谢谢你。

4

1 回答 1

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];
}];    
于 2012-05-09T14:56:28.100 回答