1
在iOS中,我试图按天,月和年来求和一个核心数据字段。我发现了一些使用NSExpression
的示例,但未发现此特定请求。按日期,月份计算的iOS核心数据总和数据
这里是我的数据对象:
data{
amount:NSNumber
date:NSDate
}
展望集团按天,月,年的数据再总结的数额。
谢谢。
在iOS中,我试图按天,月和年来求和一个核心数据字段。我发现了一些使用NSExpression
的示例,但未发现此特定请求。按日期,月份计算的iOS核心数据总和数据
这里是我的数据对象:
data{
amount:NSNumber
date:NSDate
}
展望集团按天,月,年的数据再总结的数额。
谢谢。
您可以拥有日期组件的瞬态属性。您必须将这些添加到托管对象模型中作为瞬态和实体子类。通过设计捕获的一些原始数字格式的日期的相关部分的方案,例如
-(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"];