使用 CoreData 关系计算摘要

Posted

技术标签:

【中文标题】使用 CoreData 关系计算摘要【英文标题】:Calculate a Summary with a CoreData relationship 【发布时间】:2012-01-14 16:20:02 【问题描述】:

在我的对象图中,我有两个处于经典父/子关系的实体。每个孩子都有许多属性,但我感兴趣的是时间值(存储为 NSDate)。

所以我的父对象有一个“摘要”属性,它应该是它的组合子时间值的计算总和。简单地说:每个孩子存储一段时间,我希望父母显示所有孩子的总和。

我对 CoreData 有一定的经验,我可以很容易地想到一些方法来实现这一点(例如,在父级上定义一个瞬态属性来枚举子实体并将总数添加到一个 ivar) - 但我想知道 CoreData 是否有一个固有且更优雅的解决方案......

【问题讨论】:

时间是指持续时间吗?如果是这样,您可以将时间存储为 floats 或 doubles 并使用 @sum 运算符。 【参考方案1】:

有两种方法可以解决这个问题: 首先 - 将您的数据放入 NSSet 或 NSArray 并使用 @sum 运算符:

//assume that `childs` are NSArray of your child entities and ammount is attribute to sum
NSNumber *sum=[childs valueForKeyPath:"@sum.ammount"];

second 使用特定的 fetch for specific value 并添加 NSExpressionDescription 和总和。这种方式更难,但对于更大的数据库来说更好

【讨论】:

你也许可以帮助解决这个类似的问题:***.com/questions/8862341/…,听起来你有这方面的知识。

以上是关于使用 CoreData 关系计算摘要的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 中父实体的计算属性

Cocoa:CoreData - ManagedObjectContext 中的多个实体

数据插入上的核心数据级联

谷歌地图 SDK - 核心数据

与此上下文的 CoreData SwiftUI 错误不同的 NSManagedObjectModel

为啥我不能在 NSManagedObject 子类计算属性中使用关系? (核心数据,迅速)