我使用AVFoundation框架委托方法来读取QR码。它正在阅读几乎所有的QR码和为他们提供结果数据。但是,当我尝试使用某些QR码(例如,在QR图像下方)时,它会预测它是QR码,但不会为其提供任何数据。
答案 0 :(得分:0)
您的示例正在触发内部(C ++)异常。它似乎被[AVAssetCache setMaxSize:]
所捕获,这表明此特定示例中的数据已损坏,或者只是为了使AVFoundation处理大。 / p>
因为它是一个内部异常,它(大部分)是默默地失败的。当您尝试从stringValue
中提取AVMetadataMachineReadableCodeObject
时会发生异常。
因此,如果您测试AVMetadataMachineReadableCodeObject
是否存在,您将获得YES,而如果您测试stringValue
,则会获得NO。
AVMetadataMachineReadableCodeObject *readableObject =
(AVMetadataMachineReadableCodeObject *)[self.previewLayer
transformedMetadataObjectForMetadataObject:metadataObject];
BOOL foundObject = readableObject != nil;
//returns YES
BOOL foundString = readableObject.stringValue != nil;
//returns NO + triggers internal exception
最好测试字符串而不是对象,并忽略任何返回NO的结果。
更新
在您的评论中,您会询问有关读取此条形码的本机框架解决方案。 AVFoundation 是条形码读取的原生框架,因此如果您的样本失败,您将不得不寻找第三方解决方案。
zxing
提供了一个iOS端口,但它看起来很旧而且不受支持。
zbarSDK曾经是一个很好的解决方案,但似乎也不支持ios4。由于AVFoundation现在具有内置条形码读取功能,因此这并不令人惊讶。
Accusoft的This solution确实阅读了样本,但它是专有的并且非常昂贵。
我确实对你的样本内容感到疑惑 - 它看起来像是腐败还是某种奇特的编码...