核心数据组NSDate进入月/年

时间:2012-10-16 15:20:17

标签: objective-c core-data

假设我在表中有一些NSDate:

  • 2012年1月11日
  • 2012年1月16日
  • 2012年2月14日
  • 2012/4/13
  • 2012年4月14日
  • 2012/4/18

我想按月和按年分组这些日期,以便我得到:

  • 1/2012
  • 2/2012
  • 4/2012

我目前要求获取表格中的每条记录,在日期列上执行valueForKeyPath,提取NSDateComponents并将结果存储在NSSet中。这似乎有点低效。

我想知道是否有办法编写NSPredicate,将这些日期分组到数据库端。

1 个答案:

答案 0 :(得分:2)

我做了类似的事情,并在名为sortDate的实体中使用了额外的属性。 我从自定义日期设置器中设置了sortDate。

这样的事情:

- (NSDate *)monthDateFromDate:(NSDate *)date {
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date];
    NSDate *monthDate = [calendar dateFromComponents:components];
    return monthDate;
}

- (void)setDate:(NSDate *)date {
    [self willChangeValueForKey:@"date"];
    [self setPrimitiveStartDate:date];
    [self didChangeValueForKey:@"date"];

    NSDate *sortDate = [self monthDateFromDate:date];
    [self willChangeValueForKey:@"sortDate"];
    [self setPrimitiveSortDate:sortDate];
    [self didChangeValueForKey:@"sortDate"];
}