我知道有人问过这个问题。但遗憾的是我没有找到答案。
dispatchQueue = dispatch_queue_create("myQueue", NULL);
[captureMetadaOutput setMetadataObjectsDelegate:self queue:dispatchQueue];
// [captureMetadaOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]];
// 设置条码类型
captureMetadaOutput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
我收到Crashlytics的崩溃信息:
[AVCaptureMetadataOutput setMetadataObjectTypes:] - 不支持的类型 找到。使用-availableMetadataObjectTypes。
答案 0 :(得分:8)
我们必须首先将输出添加到会话,然后我们可以设置metadataObjectTypes
。
答案 1 :(得分:3)
这是因为你关闭了相机授权。您可以打开相机授权,然后打开canner扫描QRCode。打击举例说明:
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if(status == AVAuthorizationStatusAuthorized) {
// authorized
[self setupCamera];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Tips" message:@"Authorization is required to use the camera, please check your permission settings: Settings> Privacy> Camera" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
[alert show];
}
答案 2 :(得分:2)
你需要这样做:
if ([_captureSession canAddOutput:self.metadataOutput]) {
[_captureSession addOutput:self.metadataOutput];
// 这里注意,必须先将metadataOutput 加入到session,然后才能设置metadataObjectTypes,注意顺序,不然会crash
self.metadataOutput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
[self.metadataOutput setMetadataObjectsDelegate:self queue:_videoDataOutputQueue];
}
答案 3 :(得分:0)
用户的相机也有可能损坏。 您仍然需要这样做:
if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]){
//...
}