NSPredicate:“添加”一对多关系CoreData中所有实体的属性值

Posted

技术标签:

【中文标题】NSPredicate:“添加”一对多关系CoreData中所有实体的属性值【英文标题】:NSPredicate: 'add' the value of a property for all entities in one-to-many relationship CoreData 【发布时间】:2015-04-26 15:45:37 【问题描述】:

我的 CoreData 模型有一个“父”实体,它与对象“子”具有一对多的关系。

我想要达到的目标如下:

每个“儿童”对象都有一个名为“津贴”的属性,代表他们每周获得的钱。它是一个整数。

是否可以在 ManagedObjectContext 中执行 NSFetchRequest 或类似的方法,返回为每个孩子组合的所有配额数字的值?

我目前正在做的是循环代码中的子对象并将其添加一个整数,但这一定更容易做对吗?

在 SQL 中类似于

SELECT SUM(Allowance) AS TotalAllowance FROM Child;

【问题讨论】:

这实际上并不是所指示问题的重复。链接的问题是关于获取表中字段的总和。这个问题是关于通过关系而不是直接这样做的。鉴于描述,他们的 SQL 也很糟糕,这使它看起来像链接的问题。 您需要结合使用 NSPredicate 和 NSExpression 来完成此操作。使用 NSPredicte 获取与特定 Parent 相关的孩子,然后使用 NSExpression 提取津贴并使用 expressionforfunction sum 将它们全部相加。无法提供详细答案,因为它被标记为重复。 如果不是那个问题,那么可能是 this one 的重复项 - 键值编码 @sum 聚合集合运算符将避免遍历所有子项的需要。 【参考方案1】:

汇总记录的最佳方式是通过 KVC(键值编码)。获取所有感兴趣的记录,然后

NSNumber *sum = [allRecords valueForKeypath:@"@sum.allowance"];

【讨论】:

以上是关于NSPredicate:“添加”一对多关系CoreData中所有实体的属性值的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 获取一对多关系的数据

iOS:“@count == 0”的 NSPredicate 用于一对一和一对多关系

NSPredicate,使用一对多关系的子集获取结果

核心数据:NSPredicate 一对多对多关系

使用 NSPredicate 获取一对多关系值

在一对多关系中使用 NSPredicate 进行过滤