我在iOS 7中使用新的AVFoundation条形码扫描类有一个工作的iOS条形码扫描仪。我可以成功获得一维条形码的字符串表示(例如,UPC条形码),但我还需要扫描二维PDF417条形码。
我似乎无法弄清楚如何获取存储在PDF417条形码中的数据的字符串表示(或任何表示)。扫描程序识别条形码并返回AVMetadataMachineReadableCodeObject,但将stringValue消息发送到此对象将返回nil。文档中对该方法的描述如下:
此属性的值是通过根据机器可读代码的格式解码二进制有效负载而创建的NSString,如果无法创建字符串表示,则为nil
因此看起来无法创建字符串表示。那很好......但是我该怎么做?此类似乎没有任何其他方法可以返回原始数据或有关扫描条形码的任何其他有用信息。
答案 0 :(得分:3)
原始数据确实存在于您的AVMetadataMachineReadableCodeObject
中,但它无法通过公共获取者获取。
但是,您可以使用KVO提取它,但Apple可能会拒绝您的应用。此外,未来的iOS版本可能会更改其私有API,并且您的代码可能会变为无效(因为硬编码的私钥)。
夫特:
readableCodeObject.valueForKeyPath("_internal.basicDescriptor")!["BarcodeRawData"]
目标-C
[readableCodeObject valueForKeyPath:@"_internal.basicDescriptor"][@"BarcodeRawData"];
我为iOS 8和9测试了这个。