CoreData:如何获得总计数

时间:2010-11-03 14:46:16

标签: iphone objective-c core-data

在我的数据模型中,我有两个实体:
类别和项目。

分类
attr:姓名
rel:parent(目的地:Category,Inverse:subCategories)
rel:subCategories(目的地:类别,反向:父母,多对多关系)
rel:items(目的地:Item,Inverse:category,To-Many Relationship)

物品
attr:title
rel:category(目的地:类别,反向:项目,多对多关系)

获得以下TVC:Root,Category和Item
Root显示没有父项的所有Category对象 类别显示具有特定父对象的所有Category对象
项目显示具有特定类别的所有项目对象

示例数据:

Top Cat 1
- Sub cat 1
 - Item 1
 - Item 2
 - Item 3
 - Item 4
- Sub cat 2
 - Item 1
- Sub cat 3
 - Item 1
- Sub cat 4
 - Item 1
 - Item 2
- Sub cat 5
Top Cat 2
- Sub cat 1
 - Item 1
 - Item 2
 - Item 3
- Sub cat 2
 - Item 1
- Sub cat 3
 - Item 1

那么如何在Root TVC中获得每个“Top Cat”的项目总数?
如果我想知道“子猫”的数量,我可以使用以下keyPath:“subCategories。@ count”,但是像“subCategories.items。@ count”这样的东西不起作用。

希望你能帮助我。

干杯 -Me

1 个答案:

答案 0 :(得分:5)

有三种方法可以计算:

  1. 触发相关顶级类别的获取请求,并从该对象获取其子类别关系集中的实体计数。这种方法的缺点是它将导致CoreData从商店获取关系属性,获取与该关系相关联的每个对象。 e.g。

    NSManagedObject *topCat = [context performFetch:topCatFetchRequest]; NSInteger count = topCat.subCategories.count;

  2. 使用原始SQLite API直接查询数据存储(请注意这要快得多)。

  3. 可能是最简单的,使用NSManagedObjectContext countForFetchRequest:,它将返回与给定获取请求匹配的对象数。