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);
(使用上面的方案,这就是你所需要的。但是明确的year
和month
属性将使你的代码更具可读性。)
现在要在NSFetchedResultsController
中分组,您可以将year
或day
作为sectionNameKeyPath
。您还可以使用这样的谓词进行分组/过滤:
NSArray *dataFor2000 = [allData filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"year = %@", @2000]];
用关键路径计算总和是微不足道的:
NSNumber *sum = [dataFor2000 valueForKeyPath:@"@sum.amount"];
【讨论】:
以上是关于iOS 核心数据总和数据按日期、月份年份的主要内容,如果未能解决你的问题,请参考以下文章