2013-11-28 3 views
3

У меня есть рабочий сканер штрих-кода IOS с использованием новых классов сканирования штрих-кода AVFoundation в iOS 7. Я могу успешно получить строковое представление 1D штрих-кода (например, штрих-код UPC), но мне также нужно для сканирования двухмерных штрих-кодов PDF417.Использование AVFoundation для сканирования штрих-кодов PDF417

Я не могу понять, как получить строковое представление (или любое представление) данных, хранящихся в штрих-коде PDF417. Сканер распознает штрих-код и возвращает AVMetadataMachineReadableCodeObject, но отправка сообщения stringValue этому объекту возвращает нуль. Описание этого метода из документации говорит:

Значение этого свойства является NSString создается путем декодирования двоичной полезной нагрузки в соответствии с форматом машиночитаемой коды или ноля, если строка представление не может быть создана

Таким образом, казалось бы, строковое представление не может быть создано. Это нормально ... но что мне тогда делать? Для этого класса, похоже, не существует другого метода, который будет возвращать необработанные данные или любую другую полезную информацию об отсканированном штрих-коде.

+0

Это зашифрованный штрих-код? PDF417 часто используется на водительских правах, а некоторые штаты шифруют данные, поэтому они ограничены для официального использования. – Enrico

+0

Я просто тестирую с помощью бесплатного онлайн-генератора штрих-кодов, создавая простые алфавитные строки PDF417 штрих-кодов, но сканер не вернет не-ниль stringValue для любого из них. – stackunderflow

ответ

0

Исходные данные существуют в вашем AVMetadataMachineReadableCodeObject, но он недоступен через публичный геттер.

Однако вы можете использовать KVO для его извлечения, но Apple может отклонить ваше приложение. Кроме того, будущие версии iOS могут изменять свои частные API, и ваш код может стать недействительным (из-за жестко закодированных закрытых ключей).

Swift:

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

Objective-C

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

Я проверил это для прошивки 8 и 9.

Смежные вопросы