使用核心数据制表数据 - 如何有效过滤?

时间:2013-02-25 15:29:03

标签: ios cocoa-touch core-data nspredicate

我正在构建一个用于报告销售数据的应用。核心数据结构如下

Product <---->> SaleAggregate
Customer <---->> SaleAggregate

SaleAggregate是某个月每位客户的每件产品的总销售额。该实体具有“月”,“年”和“金额”属性。

我试图以表格格式显示如下(每个客户的单独表格)

+---------+---------+---------+---------+---------+
| Product | 01/2011 | 02/2011 | 03/2011 | 04/2011 |
+---------+---------+---------+---------+---------+
| Gizmo   |      40 |     120 |      83 |      48 |
| Widget  |      92 |      38 |      37 |      36 |
| Thingy  |      12 |      84 |      29 |      40 |
+---------+---------+---------+---------+---------+

每个客户都可以记录任意数量的产品的销售情况,我需要检索所有这些销售,以某种方式按产品对它们进行分组,然后将每个SaleAggregate'Amount'显示为相应的月/年。

我可以轻松地为具有NSPredicate的客户检索所有SaleAggregates,并使用NSPredicate和@distinctUnionOfObjects将所有独特产品销售给客户,但我不确定从何处开始。

该表是使用UICollectionView实现的,但我不太清楚将正确的值放在cellForItemAtIndexPath的正确单元格中应该是什么逻辑。是否只是在一个查询中检索每个SaleAggregate,然后使用NSPredicate过滤数组,以确定我想要显示的每个单元格的正确月份/年份?我认为必须有一种更聪明的方法来做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:0)

这个怎么样?

使用谓词和过滤,您可以为特定客户获得以下内容吗?

ProductArray:
SalesAggreateDateArray:

if section ==0 
      row==0 --> "Product"
      rest of the rows --> [ProductArray objectAtIndex:indexPath.row]
else if row ==0
      sections --> [SalesAggregateDateArray objectAtIndex:indexPath.section]
else
       each cell --> [SalesAggregateAmountObjects filter with 
                                 date= date at row 0, indexPath.section and 
                                 product = product at section 0, indexPath.row]