将 VNFeaturePrintObservation 持久化到核心数据

Persisting VNFeaturePrintObservation to Core Data

我正在使用 Swift 中的 PhotosCoreML 框架在我正在开发的应用程序中实现一些图像分析功能。我需要能够存储 VNGenerateImageFeaturePrintRequest() 的结果,其类型为 VNFeaturePrintObservation.

需要为每个图像保留这些结果,以便以后可以使用它们而无需重新计算,因为这是一个缓慢的过程。 VNFeaturePrintObservation 不符合 Codable,所以我不能使用像 JSONEncoder 这样的东西,这就是我以前将这样的数据持久化到 Core Data 中的方式。

有什么方法可以将我的 VNFeaturePrintObservation 对象保存在 Core Data 中?

我不熟悉 VNFeaturePrintObservation,但是 the docs say

  • 它是 VNObservation 的子class,并且
  • VNObservation 符合NSSecureCoding

也就是说VNFeaturePrintObservation也符合NSSecureCoding。任何符合 NSSecureCoding 的 class 都可以通过使用类型设置为“Transformable”的 Core Data 属性保存在 Core Data 中。感谢 NSSecureCoding 没有额外的工作。

在 Core Data 模型编辑器中看起来像这样:

需要注意两点:

  • 类型为“可变形”
  • 自定义 class 是 VNFeaturePrintObservation

如果您 Xcode 生成源代码,属性 将如下所示:

@NSManaged public var observation: VNFeaturePrintObservation?

您无需执行任何特殊操作即可使用此 属性。

顺便说一下,Codable 在这里不适用,因为 Core Data 不使用 CodableNSSecureCoding 会自动转换 to/from Data,这就是你需要与 Core Data 一起使用的东西。