gpt4 book ai didi

iOS core data 按日期、月份年份汇总数据

转载 作者:行者123 更新时间:2023-11-29 10:53:50 25 4
gpt4 key购买 nike

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

这是我的数据对象:

data{
amount:NSNumber
date:NSDate
}

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

谢谢。

最佳答案

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

-(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 core data 按日期、月份年份汇总数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19330053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com