AVCaptureMetadataOutput setMetadataObjectTypes uns

2020-04-02 17:06发布

问题:

I know there are someone have ask this question.But it is a sorry i donot find the answer.

dispatchQueue = dispatch_queue_create("myQueue", NULL);
[captureMetadaOutput setMetadataObjectsDelegate:self queue:dispatchQueue];
//  [captureMetadaOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]];
//  设置条码类型
captureMetadaOutput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];

i got crashes info from Crashlytics:

[AVCaptureMetadataOutput setMetadataObjectTypes:] - unsupported type found. Use -availableMetadataObjectTypes.

回答1:

We have to add the output to session first, and then we can set the metadataObjectTypes.



回答2:

It is because of you close the camera authorization. You can open your camera authorization, then open canner to scan QRCode. The blow give typical examples:

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];  
}


回答3:

you need to do like this:

        if ([_captureSession canAddOutput:self.metadataOutput]) {
        [_captureSession addOutput:self.metadataOutput];
        // 这里注意,必须先将metadataOutput 加入到session,然后才能设置metadataObjectTypes,注意顺序,不然会crash
        self.metadataOutput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
        [self.metadataOutput setMetadataObjectsDelegate:self queue:_videoDataOutputQueue];
    }