AVCaptureMetadataOutput setMetadataObjectTypes 发现不支持的类型

问题描述 投票:0回答:5

我知道有人问过这个问题。但很抱歉我没有找到答案。

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

我从 Crashlytics 获得了崩溃信息:

[AVCaptureMetadataOutput setMetadataObjectTypes:] - 不支持的类型 成立。 使用 -availableMetadataObjectTypes。

ios objective-c ipad ios8 qr-code
5个回答
16
投票

我们必须先将输出添加到会话中,然后我们可以设置

metadataObjectTypes


4
投票

你需要这样做:

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

3
投票

这是因为你关闭了相机授权。您可以打开相机授权,然后打开相机扫描二维码。打击举例:

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

0
投票

也有可能是用户的相机坏了。 你还需要做:

if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]){
    //...
}

0
投票
public var metadata = [
    AVMetadataObject.ObjectType.upce,
    AVMetadataObject.ObjectType.code39,
    AVMetadataObject.ObjectType.code39Mod43,
    AVMetadataObject.ObjectType.ean13,
    AVMetadataObject.ObjectType.ean8,
    AVMetadataObject.ObjectType.code128,
    AVMetadataObject.ObjectType.code93,
    AVMetadataObject.ObjectType.pdf417,
    AVMetadataObject.ObjectType.qr,
    AVMetadataObject.ObjectType.aztec
]

    // Adding capture device output in capture session
    let output = AVCaptureMetadataOutput()
    captureSession.addOutput(output)
    output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
    output.metadataObjectTypes = metadata

我正在使用这个,它正在工作。 问题的关键是首先将输出添加到会话,然后设置元数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.