我有一个正常工作的iOS条码扫描器,它使用iOS 7中新的AVFoundation条码扫描类。我可以成功获取一维条码(例如UPC条码)的字符串表示形式,但我还需要扫描二维PDF417条码。

我似乎无法弄清楚如何获取存储在PDF417条码中的数据的字符串表示形式(或任何表示形式)。扫描程序识别条形码并返回AVMetadataMachineReadableCodeObject,但是将stringValue消息发送到该对象将返回nil。文档中对该方法的描述说:

此属性的值是通过根据机器可读代码的格式对二进制有效载荷进行解码而创建的NSString;如果无法创建字符串表示形式,则为nil

因此,似乎无法创建字符串表示形式。很好...但是我该怎么办?此类似乎没有其他方法可以返回原始数据或有关已扫描条形码的任何其他有用信息。

最佳答案

原始数据确实存在于AVMetadataMachineReadableCodeObject中,但无法通过 public 获取器获得。

但是,您可以使用KVO提取它,但是Apple可能会拒绝您的应用程序。另外,将来的iOS版本可能会更改其 private API,并且您的代码可能会无效(由于硬编码的 private 密钥)。

迅速:

readableCodeObject.valueForKeyPath("_internal.basicDescriptor")!["BarcodeRawData"]

物镜
[readableCodeObject valueForKeyPath:@"_internal.basicDescriptor"][@"BarcodeRawData"];

我在iOS 8和9上对此进行了测试。

关于ios - 使用AVFoundation扫描PDF417条码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20255989/

10-11 20:23