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
对象的B
和C
对象(它们的关系相反)并使用@count
。跨度>
您能否提供一些使用@count 的示例代码。我已经尝试过使用 NSExpression,但这给出了 B 的计数和 c 的计数。如果我考虑上面的例子:3(B 的计数)* 4(C 的计数)= 12。这给出了错误的值。
【参考方案1】:
不要按需进行乘法运算。每次A
实例与B
或C
的关系发生变化时,计算产品并将其存储在A
的新属性中。现在要获取您的总数,您可以只使用一次 fetch(返回字典类型),然后使用 @sum
(使用带有集合运算符的数组),并且不需要将任何对象实际加载到内存中。
考虑使用 KVO 监控关系变化并触发产品更新。
【讨论】:
以上是关于Coredata中的孩子数的主要内容,如果未能解决你的问题,请参考以下文章
Swift - CoreData NSPredicate - 获取父母的孩子