如何从Core Data,iOS dev中对获取的结果进行分组

时间:2013-05-10 05:37:58

标签: ios core-data nsfetchrequest

我有一个名为“Expense”的实体的核心数据,它像: 实体:“费用” 属性:“日期”,“类别”,“金额”..........

我的问题是,是否可以按年份或年份获取多少费用? 我知道如果获取是基于时间段或类别,我可以使用NSPredicate来过滤获取的结果。但是我脑海中的“Date”属性应该按年和月分开,所以我可以像在SQL查询中一样对它们进行分组。是否可以直接在fetch中执行此操作?否则,唯一的方法是将整个数据提取到NSArray并通过NSPredicate执行一些过滤。

我已搜索了好几天,但没有找到直接答案。现在我真的有点相信没有直接的解决方案。但我仍然认为想要查看是否有人可以为我提供更好的解决方案,因为每个开发人员都必须解决这个问题。

任何建议都将不胜感激,谢谢你们:)

============================添加================== ===== 此外,据我所知,关于索引列表的技术,我希望以“年月”为基础的步骤在UITableView中列出索引。根据每个索引的“年月”,我可能会为每个数组提供费用。有没有更好的方法呢?

我基于数据结构的想法是建立一些多对多的关系,从实体(年)到多个实体(,月,年 - 月)到多个实体(年 - 月,日,金额......)。当我为索引的UITableView获取每个数组时,这可能会给我带来一些便利。

2 个答案:

答案 0 :(得分:2)

添加另外三个属性以存储实体中的日期组件 (将日期组件分为日,月和年,然后存储这三个条目),并且还有一个日期属性来存储完整日期。 当您想要按年或年月获取数据时,只需使用谓词。

NSPredicate *filter = [NSPredicate predicateWithFormat:@"month=%d AND year=%d",month,year];
[request setPredicate:filter];
 NSArray *results = [self.moContext executeFetchRequest:request error:nil];
 if(results.count > 0) {
                       //do your manipulations.
            }

答案 1 :(得分:2)

您可以在Expense类中实现@readonly属性“year”和“month”,然后在谓词中使用它们。您不必单独存储这些值,只需使用NSDateComponents在getter中计算它们。