如何按日期对NSMutableArray进行分组

时间:2013-09-15 15:00:41

标签: objective-c uitableview nsmutablearray sections

我有一个NSMutableArray命名记录,其中包含一些单个记录。所以结构就像:

  • 记录
    • 记录(“名称”:“test1”,“timestamp”:“2013-09-15 12:34:35 +0000”)
    • 记录(“名称”:“test2”,“timestamp”:“2013-09-14 11:21:42 +0000”)
    • 记录(“名称”:“test3”,“timestamp”:“2013-09-14 10:47:42 +0000”)
    • 记录(“名称”:“test4”,“timestamp”:“2013-09-12 17:11:42 +0000”)
    • 记录(“名称”:“test5”,“timestamp”:“2013-09-12 19:52:42 +0000”)

知道我想在UITableView中显示它们。没有Sections:

可以正常工作
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    [...]

    NSManagedObject *record = [self.records objectAtIndex:indexPath.row];

    cell.recordNameLabel.text = [record valueForKey:@"name"];
    return cell;
}

但是现在我想按时间戳值分区记录。所以我的想法是使用以下结构创建一个名为sorted Records的新NSMutableArray:

  • 记录

    • Day(2013-09-15)

      • 记录(“名称”:“test1”,“timestamp”:“2013-09-15 12:34:35 +0000”)
    • Day(2013-09-14)

      • 记录(“名称”:“test2”,“timestamp”:“2013-09-14 11:21:42 +0000”)
      • 记录(“名称”:“test3”,“timestamp”:“2013-09-14 10:47:42 +0000”)
    • Day(2013-09-12)

      • 记录(“名称”:“test4”,“timestamp”:“2013-09-12 17:11:42 +0000”)
      • 记录(“名称”:“test5”,“timestamp”:“2013-09-12 19:52:42 +0000”)

如何将记录分组/分离到我的排序结构?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

可能的解决方案之一是:

1)使用一种方法创建NSDate类别,例如day:

@interface NSDate(Day)
- (NSDate*) day;
@end
@implementation NSDate(Day)
- (NSDate*) day
{
    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSDateComponents *comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:self];
    return [[NSCalendar currentCalendar] dateFromComponents:comps];
}
@end

2)将NSFetchedResultsController与sectionNameKeyPath - @"timestamp.day"一起使用。

答案 1 :(得分:0)

如果"记录"是一个字典对象的NSMutableArray,带有字段" timestamp"在NSDate类型中,您可以使用NSSortDescriptor

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:FALSE];
[allVideos sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

*它是一个降序的数组。 ascending:TRUE表示数组的升序!