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

标签 ios swift core-data

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

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

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

尽管有以下评论,但我找不到此功能的任何文档。我已经多次搜索文档,除了 this WWDC session 之外,找不到来自 Apple 的任何一个字。他们提到文档但没有链接到它来说明如何找到它。

我不是唯一一个没有找到这个的人:Documentation on core data derived attributes

最佳答案

我过去使用过并且一直对我有用的一种解决方案是将其作为属性添加到模型中,然后在 willSave 上以编程方式对其进行更新。 .
例如:

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

    override func willSave() {
        setPrimitiveValue(
            date.map { ISO8601DateFormatter().string(from: $0) },
            forKey: "sortDate"
        )
    }
}
如果您已经拥有带有 date 的模型版本那么您还必须执行单独的代码来生成当前的 sortDate对于那些。

关于ios - 如何在 Core Data 中使用派生属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58096610/

相关文章:

ios - 如何以编程方式创建进度条?

iOS:如何检测键盘变化事件

ios - 新项目的 SwiftUI 2.0 CoreData 问题 - 'Cannot find type ' Item' in scope'

ios - CGRectAddArc 的圆角

ios - 在 ios 中使用 Google Analytics 是否需要给予 Opt-In/Opt-Out UIAlertView ?

javascript - Firestore 推送通知 "time out"错误通知并不总是被发送

ios - 将CLLocationCoordinate2D存储在CoreData中可转换

ios - 核心数据 : Unable to load class for entity

ios - iOS 14 上的 Unity AdMob : Target is not running or required target entitlement is missing

swift - 如何让两个 SKSpriteNode 的位置始终相同?