Ios 使用AVFoundation扫描PDF417条形码

Ios 使用AVFoundation扫描PDF417条形码,ios,objective-c,avfoundation,barcode-scanner,Ios,Objective C,Avfoundation,Barcode Scanner,我有一个工作的iOS条形码扫描仪,使用iOS 7中新的AVFoundation条形码扫描类。我可以成功地获得一维条码(例如,UPC条码)的字符串表示形式,但我还需要扫描二维PDF417条码 我似乎不知道如何获取PDF417条形码中存储的数据的字符串表示(或任何表示)。扫描仪识别条形码并返回一个字符串,但将stringValue消息发送到此对象时返回零。文档中对该方法的描述如下: 此属性的值是通过根据机器可读代码的格式解码二进制有效负载而创建的NSString,如果无法创建字符串表示,则为nil

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

我似乎不知道如何获取PDF417条形码中存储的数据的字符串表示(或任何表示)。扫描仪识别条形码并返回一个字符串,但将stringValue消息发送到此对象时返回零。文档中对该方法的描述如下:

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


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

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

然而,你可以使用KVO来提取它,但苹果可能会拒绝你的应用。此外,未来的iOS版本可能会更改其私有API,并且您的代码可能会变得无效(因为硬编码的私钥)

斯威夫特:

readableCodeObject.valueForKeyPath("_internal.basicDescriptor")!["BarcodeRawData"]
目标-C

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

我在iOS 8和iOS 9上测试了它。

它是加密条形码吗?PDF417通常用于驾照,一些州对数据进行加密,因此它被限制用于官方用途。我只是使用免费的在线条形码生成器进行测试,创建简单的字母字符串PDF417条形码,但扫描仪不会为其中任何一个返回非零stringValue。我的问题与@stackunderflow完全相同。我想知道为什么苹果会认为PDF417完全由文本数据组成。某些驾驶执照(PDF417格式)包含JPEG2000图像数据。如果我使用
stringValue
,那么大部分图像数据将丢失,以至于可能不再是JPEG2000格式。