核心数据推导表达式键路径使用运算符作为中间组件

core data derivation expression key path uses an operator as an intermediate component

我正在尝试为一对多关系属性的总和编写推导表达式。

我有一个项目和一个组,项目有价格和总价(数量*价格)。 我想为该组的总价格编写一个表达式作为其组成部分的总和。

构建时出现错误

error: Misconfigured Property: LAEItemGroup.totalPrice key path “items.@sum.totalPrice” uses an operator as an intermediate component

根据 documentation and the WWDC 2019 Making Apps with Core Data 应该可以得到一对多关系的总和。

有人可以帮我找到正确的语法或方法吗?

作为解决方法,我尝试编写一个在 class 中工作的 var

@objc
public var totalPrice: Double {
    value(forKeyPath: "items.@sum.totalPrice") as? Double ?? 0
}

为什么 KeyPath 值有效但在模型编辑器中无效?

我现在有机会检查一下。模型编辑器使用的格式似乎是聚合运算符位于表达式的末尾(正如您所指出的,这与其他表达式中使用的格式不同):

items.totalPrice.@sum

在 Xcode 的模型编辑器中使用 items.totalPrice.@sum 作为派生的 属性 的表达式。

虽然这看起来只适用于数字类型?我有一个 属性 maxDate 派生的 属性 表达式

items.createdAt.@max

它编译但在运行时抛出错误:

'NSInvalidArgumentException', reason: 'currently unsupported (too many steps)

其中 Date 是 createdAt

的数据类型

我刚刚与 Rishi 一起完成了 WWDC 核心数据实验室,他帮助了我!您应该使用 sum:(items.totalPrice) 而不是 .@sum 语法。括号语法也可以用于其他一些功能(例如 count:(items)(一对多关系中的项目数)或 max:(items.createdAt)(最近项目的日期))。