ios - 在 CoreData 中使用 Swift 的日期

标签 ios swift core-data nsdate nsvaluetransformer

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

enter image description here

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

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

那么有没有一种简单的方法可以将 Date 值保存到 CoreData 或从 CoreData 获取值?

最佳答案

是的,但您可能不喜欢它。如果您使用核心数据“日期”类型声明该属性让Xcode 为您生成NSManagedObject 子类,该属性将是一个@NSManaged NSDate 类型的属性。如您所知,您必须自己处理 DateNSDate

如果您让 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/

相关文章:

swift - 是否可以在约束中包含核心数据实体类型?

iphone - 使用核心数据撤消管理

ios - 如何在应用程序启动后立即加载插页式广告

objective-c - NSManagedObjectContext:如何更新主上下文

ios - 适用于 iOS 应用程序的 Rails api?

ios - 在哪里放置 View Controller 相关的枚举

c++ - 在 OpenCV 中分析 sampleBuffer 时出现 EXC_Bad_Access

IOS如何快速删除核心数据中的对象

ios - 通过 Xcode 添加带有新源代码的新版本

ios - iDevice 态度 : stabilising quaternion