使用AVFoundation扫描PDF417条形码

我有一个工作的iOS条码扫描器,使用iOS 7中新的AVFoundation条码扫描类。我可以成功获取一维条码的string表示(例如,UPC条形码),但是我也需要扫描二维PDF417条形码。

我似乎无法弄清楚如何获得存储在PDF417条形码中的数据的string表示forms(或任何表示forms)。 扫描器识别条形码并返回AVMetadataMachineReadableCodeObject,但将stringValue消息发送给此对象返回nil。 从文档描述该方法说:

此属性的值是根据机器可读代码的格式解码二进制有效负载而创build的NSString,如果无法创buildstring表示,则为nil

所以看起来不能创build一个string表示。 没关系,但是我该怎么办呢? 这个类似乎没有任何其他方法可以返回原始数据或任何有关扫描的条形码的有用信息。

原始数据确实存在于您的AVMetadataMachineReadableCodeObject ,但不能通过公共getter获得。

但是,您可以使用KVO将其解压缩,但Apple可能会拒绝您的应用程序。 此外,未来的iOS版本可能会更改其私有API,并且您的代码可能会失效(因为硬编码的私钥)。

迅速:

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

Objective-C的

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

我testing了这个iOS 8和9。