我的数据库模型中有很多日期字段。 CoreData 允许根据“使用标量类型”选项使用 NSDate 或 TimeInterval 来保存日期。
但是这两个选项对我来说都不好,因为我想将日期用作 Date对象。由于 NSDate 不能隐式转换为 Date
,我必须将值转换/转换为 Date
或在我的 NSManagedObject 类中实现大量自定义 setter/getter。
我曾尝试使用 ValueTransformer
,但它不适用于 Date
等非@objc 类。
那么有没有一种简单的方法可以将 Date
值保存到 CoreData 或从 CoreData 获取值?
最佳答案
是的,但您可能不喜欢它。如果您使用核心数据“日期”类型声明该属性并让Xcode 为您生成NSManagedObject
子类,该属性将是一个@NSManaged
NSDate
类型的属性。如您所知,您必须自己处理 Date
与 NSDate
。
如果您不让 Xcode 为您生成子类(在 Xcode 8 中将“Codegen”设置为“Manual/None”),您可以将 Core Data“date”属性声明为某物喜欢
@NSManaged public var timestamp: Date?
它会起作用的。您可以读写 Date
值,Core Data 会做正确的事情。但是您对 NSManagedObject
子类中的代码负全部责任。你必须创建整个类(class)。如果您更新核心数据模型,您也必须更新类。这是否值得取决于您,但这是目前似乎存在的唯一解决方案。
更新:在 Xcode 9 中,生成的代码使用 Date
,因此不再需要这样做。
关于ios - 在 CoreData 中使用 Swift 的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39778111/