0

假设我在一个表中有一些 NSDates:

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

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

  • 1/2012
  • 2012 年 2 月
  • 2012 年 4 月

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

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

4

1 回答 1

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"];
}
于 2012-10-16T15:54:45.417 回答