我有一个核心数据实体,它有一个 create_at 属性(NSDate)和一个 amount 属性(NSInteger)。
我想提出一个返回按月份分组的金额总和的请求。像这样的东西:
[['February 2010', 450], ['January 2010', 300]]
我不确定如何解决这个问题,是否必须首先获取特定日期范围内的所有结果,然后计算总和,或者是否有其他方法。
附注我在 iphone 4.2 sdk 上执行此操作。
最佳答案
即使答案已经被接受,我还是要添加这个更复杂、更快速的方法以确保完整性。
假设您的数据模型中没有对月份进行建模,您将需要获取每个月的对象,然后对金额进行求和。根据需要重复几个月。
因此,第一步是为获取创建一个变量谓词。像这样的事情:
NSPredicate *exPred=[NSPredicate predicateWithFormat:@"%@<=created_at<=%@",monthStartDate,monthEndDate];
NSPredicate *exPred=[NSPredicate predicateWithFormat:@"(%@<=created_at) AND (created_at<=%@)", monthStartDate,monthEndDate];
...然后执行获取并对返回求和:
NSNumber *theSum=[@sum.[contextexecuteFetchRequest:theFetch error:&error].amount];
...或者更少的牛仔:
NSArray *fetchedObjects=[context executeFetchRequest:theFetch error:&error];
// if no error
NSNumber *theSum=[fetchedObjects valueForKeyPath:@"@sum.amount"];
将其放入每个月的循环中。
谓词和集合操作比循环快得多。尽可能使用它们而不是循环。
关于iphone - 对核心数据对象进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117882/