如何在 Core Data 中使用派生属性

rad*_*dev 11 core-data ios swift

我正在使用核心数据。我有一个名为的字段date,它可以包含日期或零。

我想创建一个名为的第二个字段sortDatedate如果有,它将使用该字段中的日期值。如果该date字段为零,我想返回当前日期。我需要将其作为核心数据属性(而不是计算属性),因为我需要根据此值对获取的记录进行排序。

我认为这样做的方法是使用派生属性,但我找不到有关如何使用它们的任何信息。我选择了名为“派生”的复选框。这显示了“派生表达式”字段,但我不知道在这里输入什么。Xcode UI 上没有指向文档的链接。

尽管有下面的评论,但我找不到有关此功能的任何文档。我已经多次搜索了文档,除了在 WWDC 会议上他们提到文档但没有链接到它来说明如何找到它之外,我找不到Apple 关于此的一个词。

我不是唯一一个没有发现这一点的人:关于核心数据派生属性的文档

fbe*_*rdo 0

我过去使用过且一直对我有用的一种解决方案是将其添加为模型中的属性,然后在willSave.

例如:

@objc(MyCoreDataModelObject)
class MyCoreDataModelObject: NSManagedObject {
    @NSManaged var date: Date?

    override func willSave() {
        setPrimitiveValue(
            date.map { ISO8601DateFormatter().string(from: $0) },
            forKey: "sortDate"
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您已经拥有模型的版本,date那么您还必须执行单独的代码来为sortDate这些版本生成当前版本。