我的数据库模型中有很多日期字段。 CoreData允许使用NSDate或TimeInterval来保存日期,具体取决于“使用标量类型”选项。
但是这两个选项对我都不好,因为我想将日期用作Date个对象。由于NSDate不能隐式转换为Date
,我必须将值转换/转换为Date
或在我的NSManagedObject类中实现许多自定义setter / getter。
我尝试使用ValueTransformer
,但它不适用于{@ 1}}这样的非@objc类。
那么有一种简单的方法可以保存并从CoreData获取Date
值吗?
答案 0 :(得分:30)
是的,但你可能不喜欢它。如果使用核心数据“日期”类型声明属性和让Xcode为您生成NSManagedObject
子类,则该属性将是类型为{{1}的@NSManaged
属性}}。如您所知,您必须自己处理NSDate
与Date
的对比。
如果您不让Xcode为您生成子类(在Xcode 8中将“Codegen”设置为“Manual / None”),您可以将Core Data“date”属性声明为某些内容像
NSDate
它会起作用。您可以读取和写入@NSManaged public var timestamp: Date?
值,Core Data将做正确的事情。但是你对Date
子类中的代码负有全部责任。你必须创建整个班级。如果更新Core Data模型,则还必须更新类。这看起来是否值得取决于你,但它是目前似乎存在的唯一解决方案。
更新:在Xcode 9中,生成的代码使用NSManagedObject
,因此不再需要这样做了。
答案 1 :(得分:9)