排序NSMutableArray包含使用sortedArrayUsingComparator的NSArray

时间:2012-05-09 14:42:35

标签: iphone objective-c ios nsdate date-sorting

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

谢谢。

1 个答案:

答案 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];
}];