ios - Coredata 中的 child 数

标签 ios objective-c core-data nsfetchrequest

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

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

最佳答案

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

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

关于ios - Coredata 中的 child 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25861779/

相关文章:

objective-c - 什么时候使用类别,什么时候使用子类化?

php - 如何使用 Objective-C 在 iOS 上执行相同的加密/解密 PHP 函数?

ios - 通过 Objective-C 中的属性过滤 NSArray

ios - 单元格背景颜色清除插入行时的奇怪行为

ios - 如何使用 swift 4.2 在泛型类中创建 Singleton?

objective-c - IBOutletCollection 在 Interface Builder 中设置排序

ios - 覆盖核心数据对多属性并返回过滤集

ios - 由于 Mach-O 链接器错误,无法将应用程序安装到 iPhone

ios - 如何在 Swift 5 中将电子表格数据预加载到 Core Data?

ios - UI 在执行 NSBatchDeleteRequest 时卡住