将VNFeaturePrintObservation保留到核心数据

时间:2020-08-20 10:08:41

标签: ios swift core-data coreml

我正在使用Swift中的PhotosCoreML框架在正在开发的App中实现一些图像分析功能。我需要能够存储类型为VNGenerateImageFeaturePrintRequest()的{​​{1}}的结果。

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

是否可以将JSONEncoder对象保留在Core Data中?

1 个答案:

答案 0 :(得分:1)

我对VNFeaturePrintObservation不熟悉,但是the docs say

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

这意味着VNFeaturePrintObservation也符合NSSecureCoding。可以使用类型设置为“可转换”的Core Data属性将符合NSSecureCoding的任何类保存在Core Data中。多亏了NSSecureCoding,没有其他工作了。

在Core Data模型编辑器中将如下所示:

Core Data model editor for transformable type

需要注意的两件事:

  • 类型为“可转换”
  • 自定义类别为VNFeaturePrintObservation

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

@NSManaged public var observation: VNFeaturePrintObservation?

使用此属性无需做​​任何特殊的事情。

顺便说一句,Codable不适用于此处,因为Core Data不使用CodableNSSecureCoding将自动与Data进行相互转换,这就是您需要与Core Data一起使用的原因。