2013-10-12 34 views
1

在iOS中,我试图按天,月和年来求和一个核心数据字段。我发现了一些使用NSExpression的示例,但未发现此特定请求。按日期,月份计算的iOS核心数据总和数据

这里是我的数据对象:

data{ 
    amount:NSNumber 
    date:NSDate 
} 

展望集团按天,月,年的数据再总结的数额。

谢谢。

回答

2

您可以拥有日期组件的瞬态属性。您必须将这些添加到托管对象模型中作为瞬态和实体子类。通过设计捕获的一些原始数字格式的日期的相关部分的方案,例如

-(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"];