我正在尝试使用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
答案 0 :(得分:29)
在设置元数据对象类型之前,尝试将输入和输出添加到会话中。
当您还没有将相机连接到会话时, availableMetadataObjectTypes 将为空。
答案 1 :(得分:3)
这是错误消息非常有用的极少数情况之一。
致电[output availableMetadataObjectTypes]
并确保您尝试设置的内容在那里。如果没有,那么请不要尝试设置该值。