iphone - 对核心数据对象进行分组

标签 iphone objective-c cocoa core-data

我有一个核心数据实体,它有一个 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/

相关文章:

iphone - 需要一些关于 iPhone 应用程序的 C++ 服务器的建议

objective-c - LLDB 等同于 gdb 的 future-break?

objective-c - GPUImage capturePhotoAsImageProcessedUpToFilter 仅适用于最后一个过滤器

cocoa - 如何激活窗口?

iphone - 如何在iphone/ipad 的dock 栏中显示播放项目的详细信息?

javascript - ipad焦点输入时如何隐藏键盘

iphone - 播放短音效

ios - 如何保持 iOS 应用程序的干净生产版本?

macos - 如何将键盘向上/向下事件从 NSTextField 转发到 NSTableView?

OSX 的 Xcode 4 : Trying to build MailCore. 框架