将核心数据中的天数合并为数周

时间:2011-08-05 13:35:54

标签: iphone objective-c ios core-data aggregate

有没有人对我面临的这个问题有任何提示。它并不复杂,但在Core Data中可能有更简洁的方法。

我有一个包含日期和值的数据表(或托管对象)。我通常会显示每天的数据以及每天的价值。

我想在几周内对此进行分组,因此汇总所有具有一定数量周的行。

示例:我的数据目前显示如下

  • 8月5日| 5
  • 8月4日| 18
  • 8月3日| 8
  • 8月2日| 3
  • 8月1日| 10
  • 7月31日| 2
  • 7月30日| 1
  • 7月29日| 7
  • 7月28日| 6

等等

我想像这样显示它:

  • 第24周| 47
  • 第23周| 13
  • 第22周| 20

等等

我已经在使用NSFetchedResultsController了,如果可能的话,我想继续使用它。我认为这就是困难所在。如果我只是展示一个UITableView和一个NSArray数据,那么就可以很容易地添加我的值并显示数据。

然而,NSFetchedResultsController似乎与获取结果有关(显然),所以我想我想使用fetch聚合这些数据,这样我就可以像处理原始数据一样将它挂钩到我的表视图中。

有什么建议吗?

由于

4 个答案:

答案 0 :(得分:0)

亲爱的,这是一个非常重要的事情。想想用户可能拥有的许多不同的日历。但是,自1970年以来,日期被保存为时间戳,以秒为单位。您可以尝试使用coreDataDate % (86400*7) // seconds per day * 7 days进行计算 通过以模数计算,它将自动分组七天。但请记住,有许多案例需要预先考虑,例如某些国家的冬季/夏季时间变化。

答案 1 :(得分:0)

(前言:CoreData中没有“表格”)

如果修改数据模型以提供派生属性(它可以在自定义子类中,而不需要建模),则定义周。也许是weekOfYear。然后,您希望按周和年对这些部分进行分组。

答案 2 :(得分:0)

我将研究创建一个方法,该方法使用NSCalendar和NSDateComponents的组合来查找属于一周的日期,然后使用NSPredicate和BETWEEN语句拉出该周的日期。如果日期是NSDate格式,这将更容易,但如果没有,您可以轻松转换。

当我不得不将一周的所有日子从Core Data商店中抽出时间卡应用程序时,我使用了非常相似的东西。

答案 3 :(得分:0)

我这样做了,但有点丑陋。但它有效,我需要让它快速运作......

因为我想继续使用我的FetchedResultsController,以及我创建的所有架构将它连接到我的视图控制器,所以在我的周和月中使用不同的实体似乎更容易。

我知道这可以通过存储可以计算的数据来违背数据存储原则,但这样做相对容易。

我有UsageDay托管对象,这是大多数数据。然后我有一个UsageWeek和UsageMonth对象。

当我存储UsageDay对象时,从其日期ivar开始,我计算UsageWeek和UsageMonth的weekOfYear和monthOfYear(和year)。

UsageWeek包含:weekOfYear,year和它包含的UsageDay对象的NSSet UsageMonth包含:monthOfYear,year和它包含的UsageDay对象的NSSet。

然后,我可以轻松获得所有UsageWeek的列表,其中包含一组7个UsageDay对象 - 我在其上调用[usageWeek valueForKeyPath:@“usageDaySet。@ sum.value”] - 这给出了我的总数。工作正常。

随意公开批评这个设计 - 我期待它!!!