Использование AVFoundation для сканирования штрих-кодов PDF417

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

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

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

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

1 ответ

Решение

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

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

Swift:

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

Objective-C

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

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

Другие вопросы по тегам