AVFoundation元数据对象类型

时间:2014-10-07 20:29:39

标签: ios swift avfoundation

我正在尝试使用AVFoundation使用以下代码读取条形码,但我不断收到以下错误。帮助为什么会非常感激。提前谢谢!

//Create camera view
        session = AVCaptureSession()
        var layer = self.cameraView.layer
        vidLayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as AVCaptureVideoPreviewLayer
        vidLayer.frame = self.cameraView.bounds
        vidLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
        var device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        var error:NSError? = nil
        var input:AVCaptureDeviceInput? = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
        var output = AVCaptureMetadataOutput();
        session.addOutput(output)
        output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
        output.metadataObjectTypes = [AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode]
        if(input != nil){
            println("ADDED")
            session.addInput(input)
        }
        layer.addSublayer(vidLayer)
        session.startRunning()

2014-10-07 15:25:09.279 WegmannMobile[457:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVCaptureMetadataOutput setMetadataObjectTypes:] - unsupported type found.  Use -availableMetadataObjectTypes.'
*** First throw call stack:
(0x2d7edf83 0x38068ccf 0x2c72bc29 0x618f0 0x62060 0x300256df 0x3019b43f 0x300b8d63 0x300b8b6d 0x300b8b05 0x3000ad59 0x2fc8862b 0x2fc83e3b 0x2fc83ccd 0x2fc836df 0x2fc834ef 0x2fc7d21d 0x2d7b9255 0x2d7b6bf9 0x2d7b6f3b 0x2d721ebf 0x2d721ca3 0x3267b663 0x3006e14d 0x9eff4 0x9f030 0x38575ab7)
libc++abi.dylib: terminating with uncaught exception of type NSException

2 个答案:

答案 0 :(得分:29)

在设置元数据对象类型之前,尝试将输入和输出添加到会话中。

当您还没有将相机连接到会话时, availableMetadataObjectTypes 将为空。

答案 1 :(得分:3)

这是错误消息非常有用的极少数情况之一。

致电[output availableMetadataObjectTypes]并确保您尝试设置的内容在那里。如果没有,那么请不要尝试设置该值。