使用NSSortDescriptor在NSMutableArray中对NSDate对象进行排序?

时间:2013-01-14 11:58:54

标签: iphone ios objective-c nsdate nssortdescriptor

在我的项目中,我从APi获取了一些数据,并通过解析NSMutableArray将数据转换为JSON。它有一个名为“ StartDate ”的密钥,其格式为:“mm/dd/yyyy hh:mm:ss” 如下图所示

StartDate: "5/18/2013 12:00:00 AM"

我将这些数据保存到resultArray。还有4个对象的键,因为我的JSON格式为

{
    EventId: "xxxx",
    Title: "xxx",
    Location: "xxxx",
    StartDate: "5/18/2013 12:00:00 AM",
    Link: null
}

这里有多个这样的对象。我需要做的就是根据日期(升序或降序)对resultArray的内容进行排序, 我使用以下代码

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"StartDate" ascending:TRUE];
[resultArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

但是我得到了一个改组的结果,整个排序并不正确,任何人都可以在我出错的地方打电话给我。

谢谢

2 个答案:

答案 0 :(得分:6)

应该有效

[resultArray sortUsingComparator:^NSComparisonResult(id a, id b) {

    static NSDateFormatter *dateFormatter = nil;

    if (!dateFormatter) {
        dateFormatter = [[NSDateFormatter alloc] init];
        dateFormatter.dateFormat = @"mm/dd/yyyy hh:mm:ss"; 
    }

    NSString *date1String = [a valueForKey:@"StartDate"];
    NSString *date2String = [b valueForKey:@"StartDate"];

    NSDate *date1 = [dateFormatter dateFromString:date1String];
    NSDate *date2 = [dateFormatter dateFromString:date2String];

    return [date1 compare:date2];
}];

答案 1 :(得分:3)

您的StartDate似乎是字符串格式,我相信它会将其改为字符串..您应首先转换为NSDate,然后应用此描述符...希望这会有所帮助。