2013-11-28 45 views
3

我有一臺使用iOS 7中新的AVFoundation條碼掃描類的iOS條碼掃描器。我可以成功獲取一維條碼的字符串表示形式(例如UPC條形碼),但我也需要掃描二維PDF417條形碼。使用AVFoundation掃描PDF417條碼

我似乎無法弄清楚如何獲得存儲在PDF417條形碼中的數據的字符串表示形式(或任何表示形式)。掃描器識別條形碼並返回AVMetadataMachineReadableCodeObject,但向此對象發送stringValue消息返回nil。從文檔該方法的描述說:

該屬性的值是由如果字符串表示不能創建

解碼根據機器可讀代碼或零的格式的二進制有效負載創建一個NSString

因此,看起來無法創建字符串表示。沒關係......但我該怎麼辦?這個類似乎沒有任何其他方法可以返回原始數據或任何其他有關掃描條形碼的有用信息。

+0

它是一個加密的條形碼? PDF417通常用於駕駛執照,一些州對數據進行加密,因此僅限於官方使用。 – Enrico

+0

我只是用一個免費的在線條形碼生成器進行測試,創建簡單的按字母順序排列的字符串PDF417條形碼,但掃描儀不會爲其中的任何一個返回非零字符串值。 – stackunderflow

回答

0

原始數據確實存在於您的AVMetadataMachineReadableCodeObject中,但無法通過公共獲取方獲得。

但是,您可以使用KVO來提取它,但Apple可能會拒絕您的應用程序。此外,未來的iOS版本可能會更改其私有API,並且您的代碼可能會失效(因爲硬編碼的私鑰)。

夫特:

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

目標C

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

我測試此爲iOS 8和9