保存并生成AVMetadataMachineReadableCodeObject Swift

时间:2016-06-06 07:26:34

标签: swift core-data realm

我在这里遇到一些严重的问题,试图在Swift中保存AVMetadataMachineReadableCodeObject

我正在使用此库:https://github.com/yeahdongcn/RSBarcodes_Swift,但它的文档很糟糕。

基本上,我可以正常扫描并可以处理扫描和将来的扫描以构建扫描历史记录"类型屏幕...当我重新启动应用程序时出现问题 - 我的扫描历史记录为空(显然)。我需要以某种方式在本地保存这些扫描,但我不知道该怎么做。

我尝试保存扫描的属性,但在重新启动应用程序后重建它并不是很棘手。我已经尝试将它们保存为自定义对象(这是理想的并且可能 - 除了AVMetadataMachineReadableCodeObject部分,因为我收到non-property之类的错误等等。

我接近我认为我应该尝试像Realm这样的事情,但我以前从未使用它。

1 个答案:

答案 0 :(得分:2)

您无法轻松将AVMetadataMachineReadableCodeObject保存到Core Data,因为它不是受支持的类型,并且不符合NSCoding。切换到Realm不会有任何区别,因为它具有相同的限制(它不能只保存AVMetadataMachineReadableCodeObject)。原因是相似的 - 在两种情况下AVMetadataMachineReadableCodeObject都不是相应类型的子类,并且它不是受支持的属性类型之一。

您需要做什么取决于您的扫描历史记录UI的外观。保存AVMetadataMachineReadableCodeObject几乎肯定不是最好的方法(你可以通过Swift扩展添加NSCoding但它可能是错误的答案,即使它有效)。有几种可能性:

  1. 保存扫描代码所代表的数据,而不是代码本身。您可以从stringValue的{​​{1}}属性中获取此信息。如果要显示扫描历史记录,请生成新图像进行显示。使用核心图像非常简单 - AVMetadataMachineReadableCodeObjectCOQRCodeGeneratorCIAztecCodeGeneratorCICode128BarcodeGenerator都是内置的。
  2. 在扫描图像的同时拍摄照片,并将照片显示为扫描历史记录条目。在UI中包含扫描代码的CIPDF417BarcodeGenerator,以便人们可以看到图像代表的内容。