博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS7后使用AVCapture出现 unsupported type found. Use -availableMetadataObjectTypes错误的解决...
阅读量:5037 次
发布时间:2019-06-12

本文共 3623 字,大约阅读时间需要 12 分钟。

在集成扫描二维码功能时候,我使用的是系统在iOS7.0 之后才支持的扫描二维码功能类。刚开始创建代码是这么写的

1 -(void)setUpCamera 2 { 3     self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 4      5     self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; 6      7     self.outPut = [[AVCaptureMetadataOutput alloc]init]; 8     self.outPut.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];     9     [_outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];10     self.session = [[AVCaptureSession alloc]init];11     [self.session setSessionPreset:AVCaptureSessionPresetHigh];12     if ([self.session canAddInput:self.input])13     {14         [self.session addInput:self.input];15         16     }17     18     if ([self.session canAddOutput:self.outPut])19     {20         [self.session addOutput:self.outPut];21     }22     23 24     _preview =[AVCaptureVideoPreviewLayer layerWithSession:self.session];25     _preview.videoGravity = AVLayerVideoGravityResizeAspectFill;26     _preview.frame =CGRectMake(20,110,280,280);27     [self.view.layer insertSublayer:self.preview atIndex:0];28 29     [self.session startRunning];30 }

在其代理类里面

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{    NSString *stringValue;        if ([metadataObjects count] > 0 ) {        AVMetadataMachineReadableCodeObject *metadataObject = [metadataObjects objectAtIndex:0];        stringValue = metadataObject.stringValue;    }    [self.session stopRunning];    [self dismissViewControllerAnimated:YES completion:^{        [timer invalidate];        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"二维码相关内容" message:stringValue delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];        [alertView show];            }];}

在真机上测试,系统是iOS7.1.1

运行时出现下面的错误:

*** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘*** -[AVCaptureMetadataOutput setMetadataObjectTypes:] – unsupported type found. Use -availableMetadataObjectTypes.’

解决不了,上网上搜索也没有相关的解决方法,最后查找相关文档并且查看手册,还是不能够解决问题,请教一大神,查看系统帮助文档的 后改变了创建代码块-(void)setUpCamera如下;

-(void)setUpCamera{    self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];        self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];        self.outPut = [[AVCaptureMetadataOutput alloc]init];//    self.outPut.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];//    self.outPut.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];        [_outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];    self.session = [[AVCaptureSession alloc]init];    [self.session setSessionPreset:AVCaptureSessionPresetHigh];    if ([self.session canAddInput:self.input])    {        [self.session addInput:self.input];            }        if ([self.session canAddOutput:self.outPut])    {        [self.session addOutput:self.outPut];    }    self.outPut.metadataObjectTypes = [NSArray arrayWithObject:AVMetadataObjectTypeQRCode];    _preview =[AVCaptureVideoPreviewLayer layerWithSession:self.session];    _preview.videoGravity = AVLayerVideoGravityResizeAspectFill;    _preview.frame =CGRectMake(20,110,280,280);    [self.view.layer insertSublayer:self.preview atIndex:0];    [self.session startRunning];}

这样问题就解决了

大神解释官方文档的意思大致是:

AVCaptureMetadataOutput类的对象(在本例里是self.outPut),self.outPut的属性metadataObjectTypes要在AVCaptureSession类对象(本例为self.session)

[self.session addOutput:self.outPut]即添加了AVCaptureMetadataOutput的对象后,方可对其进行设置;

 

 

转载于:https://www.cnblogs.com/zhaopengtao14/p/3805602.html

你可能感兴趣的文章
8467:鸣人的影分身
查看>>
语法分析的那些算法
查看>>
jQuery each使用
查看>>
立即执行函数
查看>>
第四次寒假作业
查看>>
USE_FUNC.txt
查看>>
分享一下 Eclipse 插件 PyDev 的安装
查看>>
(转)Python3之os模块
查看>>
hdu 4038 stone
查看>>
ASP.NET 显示项目之外的图片
查看>>
2011数字图书馆前沿问题高级研讨班-学习笔记1
查看>>
深度学习系列 Part(3)
查看>>
HDFS之HBase伪分布安装
查看>>
android 测试----Monkey
查看>>
static 关键字
查看>>
Vue 的基本认识
查看>>
最高的分数
查看>>
命令别名设置: alias, unalias
查看>>
1051. 复数乘法 (15)
查看>>
gcc相关
查看>>