iOS7后使用AVCapture出现 unsupported type found. Use -availableMetadataObjectTypes错误的解决...

在集成扫描二维码功能时候,我使用的是系统在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.’

解决不了,上网上搜索也没有相关的解决方法,最后查找相关文档并且查看手册,还是不能够解决问题,请教一大神,查看系统帮助文档的 AVMetadataObjectTypes后改变了创建代码块-(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
详细功能列举: <br> 1.实时显示哪在用户在线,会员关闭网页自动退出功能,可显示用户采用什么浏览器和操作系统,彻底杜绝一帐号多用户使用 <br> 2.增加了网站投票功能 <br> 3.采用双网站联盟,用户可以选择介绍客户赚佣金或介绍客户赚看片资源。 <br> 4.扣点功能,每一部影片站长可以按照他的价值设定需要扣取的点数 <br> 5.后台增加网吧IP功能,在该网吧上网的用户可以免注册免付费看电影 <br> 6.使用充值卡的用户无需要注册激活充值卡后就可以使用 <br> 7.用户自助赚点功能,用户注册后可以获取一段代码,可以对电影网站进行宣传.每带来一个用户访问宣传用户就可以获得(1点[扣点用户]/0.2天[包月用户或游客]) <br> 8.来路分析,可以看到网民是从哪个网站来的,或看到该网民是由哪个用户宣传带来的. <br> 9.IP限制,被限制的ip将无法访问 <br> 10.黄金通道,只有黄金会员以上级别才可以进入。 <br> 11.后台管理员密码采用md5加密,极大地保护了后台的安全 <br> 12.会员密码采用md5加密,极大地保护了会员的安全 <br> 13.数据库采用在线管理 <br> 14.改变了局部一些使用不方便的功能 <br> 15.在线支付、手机支付、声讯支付功能,会员付费后自动开通到期自动封帐号,程序会自动跟据会员付多少钱而给会员定相应的级别和相应的观看时间,会员到期程序自动封锁帐号。 <br> 16.采用ACCESS2002数据库和ACCESS2000数据库两种任君选择,我们制作的数据库非常安全是无法被非法下载的请君放心。 <br> 17.修正了一些漏洞(彻底跟黄金眼说拜拜) <br> 18.多级管理员操作,演员搜索 <br> 19.下载地址和在线地址实现分离 <br> 20.观看电影记录,会员可以查看自己过去观看过多少部电影(电影名称、观看电影时间),会员报告影片错误功能。 <br> 21.管理员可以在后台查看各个会员的观看记录,可以根据会员看不同电影的时间、会员的ip地址,判断会员是否有盗链。 <br> 22.管理员在后台可随时改变会员等级,实行会员分类管理。 <br> 23.电影可以设置为免费电影、普通电影、黄金电影。 <br> 24.隐藏影片地址功能,彻底防盗链。 25.内置1st-pay在线支付功能,用户只需在后台设置好1st-pay的用户名及返回URL即可使用,无需修改程序。支付成功返回的URL是user/payok.asp 后台地址:admin/login.asp 管理账号:163dy/163dy

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值