在CoreData中使用Swift的日期

Avt*_*Avt 13 core-data nsdate ios nsvaluetransformer swift

我的数据库模型中有很多日期字段.CoreData允许使用NSDate或TimeInterval来保存日期,具体取决于"使用标量类型"选项.

在此输入图像描述

但是这两个选项对我都不好,因为我想将日期用作Date对象.由于NSDate不能隐式转换为Date我必须Date在我的NSManagedObject类中转换/转换值或在其中实现许多自定义setter/getter.

我试过使用ValueTransformer但它不能用于非@objc类Date.

那么有一种简单的方法来保存和Date从CoreData 获取值吗?

Tom*_*ton 31

是的,但你可能不喜欢它.如果使用Core Data"Date"类型声明属性让Xcode NSManagedObject为您生成子类,则该属性将是@NSManagedtype 的属性NSDate.正如你已经想到的那样,你必须DateNSDate自己打交道.

如果你没有让Xcode中产生的子类,你(在Xcode 8组"代码生成"为"手动/无"),你可以声明核心数据"日期"属性作为像

@NSManaged public var timestamp: Date?
Run Code Online (Sandbox Code Playgroud)

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

更新:在Xcode 9中,生成的代码使用Date,因此不再需要这样做.

  • 将"Codegen"设置为"Manual/None"的选项如何,而不是自己创建整个类,只需在左侧选择模型,然后从菜单中选择"Editor - > Create NSManagedObjectSubclass"?这为您创建了课程,那么您所要做的就是将NSDate更改为Date.每次更新模型时都必须这样做. (4认同)
  • 我只是尝试在Xcode 9中重新生成一个Swift类,但覆盖的文件仍然使用`NSDate`?我使用编辑器"Create Managed Subclass"手动生成类.我错过了吗? (4认同)

Hol*_*dad 9

这里有一个可行的解决方法,如果您将其设置为可转换并将其自定义类设置为Date它只是起作用.

可变形日期