Coredata中的孩子数

Posted

技术标签:

【中文标题】Coredata中的孩子数【英文标题】:Count of child in Coredata 【发布时间】:2014-09-16 06:14:18 【问题描述】:

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

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

数据:

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 条记录时,它需要更多时间。如果有其他方法,请建议我。

【问题讨论】:

尝试另一种方式,使用NSPredicate,获取具有A 对象的BC 对象(它们的关系相反)并使用@count。跨度> 您能否提供一些使用@count 的示例代码。我已经尝试过使用 NSExpression,但这给出了 B 的计数和 c 的计数。如果我考虑上面的例子:3(B 的计数)* 4(C 的计数)= 12。这给出了错误的值。 【参考方案1】:

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

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

【讨论】:

以上是关于Coredata中的孩子数的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 获取孩子的父母

Swift - CoreData NSPredicate - 获取父母的孩子

使用 CoreData 关系计算摘要

如何计入coredata(聚合)?

CoreData NSFetchRequest 返回结果,但对象的节数返回 0

如何在 onDelete 中获取当前的 CoreData 项