13

我的数据库模型中有很多日期字段。CoreData 允许根据“使用标量类型”选项使用 NSDate 或 TimeInterval 来保存日期。

在此处输入图像描述

但是,这两个选项对我都不利,因为我想将日期用作Date对象。由于 NSDate 不能隐式转换为,我必须在我的 NSManagedObject 类中将Date值转换/转换为或实现许多自定义设置器/获取器。Date

我曾尝试使用ValueTransformer,但它不适用于非@objc 类,如Date.

那么有没有一种简单的方法来保存和获取DateCoreData 的值?

4

2 回答 2

31

是的,但你可能不喜欢它。如果您使用 Core Data “Date” 类型声明属性让 XcodeNSManagedObject为您生成子类,则该属性将是@NSManagedtype 的属性NSDate。正如您所知道的那样,您将不得不DateNSDate自己打交道。

如果您不让Xcode 为您生成子类(在 Xcode 8 中将“Codegen”设置为“Manual/None”),您可以将 Core Data 的“date”属性声明为类似

@NSManaged public var timestamp: Date?

它会起作用的。你可以读取和写入Date值,Core Data 会做正确的事情。但是您将完全负责NSManagedObject子类中的代码。您必须创建整个班级。如果你更新 Core Data 模型,你也必须更新类。这是否值得取决于您,但它是目前似乎存在的唯一解决方案。

更新:在 Xcode 9 中,生成的代码使用Date,所以这不再是必要的了。

于 2016-09-29T20:10:23.370 回答
10

如果您将其设置为可转换并将其自定义类设置为它,那么这里有一个可行的解决方法Date

可转换日期

于 2017-11-02T15:56:54.830 回答