【问题标题】:Sort NSDate objects in NSMutableArray using NSSortDescriptor?使用 NSSortDescriptor 对 NSMutableArray 中的 NSDate 对象进行排序?
【发布时间】:2013-01-14 11:58:54
【问题描述】:

在我的项目中,我从APi 获取一些数据,然后通过解析JSON 将数据检索到NSMutableArray。它有一个名为“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]];

但是我得到一个打乱的结果,排序始终不正确,谁能告诉我我哪里出错了。

谢谢

【问题讨论】:

  • 也许(可能)是一个骗子,但肯定不是太本地化。我只能怀疑那些反对的选民懒得去查那些骗子。
  • @HotLicks 你是对的!感谢您的评论老兄,我刚刚发布了让他们注意不要在这里滥用他们的权利!他们中的一些人将投票和举报视为一种爱好!

标签: iphone ios objective-c nsdate nssortdescriptor


【解决方案1】:

应该可以

[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];
}];

【讨论】:

  • 很好的答案,我用你的答案解决了它,jsut将日期格式从mm...更改为MM
  • 另一种选择是将字符串重新排列为 yyyymmdd 顺序。可以通过一些简单的字符串操作来完成。
【解决方案2】:

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

【讨论】:

  • 感谢您的帮助,但我没有更改 APi 格式的权限,所以我应该在转换为日期格式后替换数组的每个日期键吗?
  • 您必须将它存储在我猜的数据模型中,您可以在其中将此模型对象的属性指定为 NSDate 并在将其提供给对象时将其转换为日期...或更简单可以按您说的做,但这不是标准的方法……但到底是什么……您应该先尝试您的方法,如果以后可以使用,您可以将其转换为数据模型对象
  • 这是有道理的,但是您可以通过检查接受的答案来查看更简单的方法。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多