iOS 核心数据总和数据按日期、月份年份

Posted

技术标签:

【中文标题】iOS 核心数据总和数据按日期、月份年份【英文标题】:iOS core data sum data by date, month year 【发布时间】:2013-10-12 03:06:52 【问题描述】:

ios 中,我尝试按日、月和年对核心数据字段求和。我发现了一些使用 NSExpression 的示例,但不是这个特定的请求。

这是我的数据对象:

data
  amount:NSNumber
  date:NSDate

希望按日、月和年对数据进行分组,然后对金额求和。

谢谢。

【问题讨论】:

【参考方案1】:

您可以为日期组件设置一个瞬态属性。您必须将它们作为瞬态添加到托管对象模型和实体子类中。它们可以这样计算:

-(NSNumber*)year 
   NSCalendar *greg = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
   NSDateComponents *comps = [greg components:NSYearCalendarUnit fromDate:self.date];
   return @(comps.year);

通过设计一个以某种原始数字形式(例如天:

-(NSNumber*)day 
   NSCalendar *greg = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
   NSDateComponents *comps = [greg 
      components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
      fromDate:self.date];
   return @(comps.year*10000+comps.month*100+comps.day);

(使用上面的方案,这就是你所需要的。但是明确的yearmonth 属性将使你的代码更具可读性。)

现在要在NSFetchedResultsController 中分组,您可以将yearday 作为sectionNameKeyPath。您还可以使用这样的谓词进行分组/过滤:

NSArray *dataFor2000 = [allData filteredArrayUsingPredicate:
  [NSPredicate predicateWithFormat:@"year = %@", @2000]];

用关键路径计算总和是微不足道的:

NSNumber *sum = [dataFor2000 valueForKeyPath:@"@sum.amount"];

【讨论】:

以上是关于iOS 核心数据总和数据按日期、月份年份的主要内容,如果未能解决你的问题,请参考以下文章

按核心数据中的日期组件获取条目

如何仅使用月份和日期从核心数据中获取

如何获取有关月份和年份的数据

如何按月份和年份输入过滤具有日期时间索引的数据框?熊猫

两个日期之间实体属性的核心数据总和

分组核心数据对象