Coredata的孩子数

时间:2014-09-16 06:14:18

标签: ios objective-c core-data nsfetchrequest

我需要根据逻辑找到孩子的数量。

我有表A,它有两个关系B和C.现在我需要找到B和C的计数。 计数= C的B * NO否。

数据:

A1 
{
    {
    B1a
    },
    {
    C1a,
    C1b
    }
},
A2:
{
    {
    B2a,
    B2b
    },
    {
    C2a,
    C2b
    }
}

总计数= 6

我试过以下

NSEntityDescription *entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:context];
NSArray *allObjects = [context executeFetchRequest:fetchRequest error:&fetchError];
NSInteger totalCount= 0;

for(A *a in allObjects)
{
    NSInteger countOfB = [a.B count];
    NSInteger countOfc = [a.C count];
    totalCount = totalCount + (countOfB * countOfc);
}

这很好用。但是当我有10000条记录时,它需要更多的时间。如果有其他方法,请建议我。

1 个答案:

答案 0 :(得分:1)

不要按要求进行乘法运算。每次A实例与BC的关系发生更改时,请计算产品并将其存储在A的新属性中。现在要获取总计数,您只能使用一次提取(返回字典类型),然后使用@sum(使用带有集合运算符的数组),并且不需要将任何对象实际加载到内存中。

考虑使用KVO监控关系变化并触发产品更新。