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的对象后,方可对其进行设置;

 

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

时间: 2024-10-20 15:41:57

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

Xcode 升级后,常常遇到的遇到的警告、错误,解决方法(转)

从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换掉这个方法即可. 2,警告:Declaration of "struct sockaddr" will not be visible outside of this function解决办法:在你的开源.m文件中添加 #import 3,警告:Implicit conversion fro

关于spring4和hibernate4整合,配置事务报“Cannot unwrap to requested type [javax.sql.DataSource]”错误的解决方法及心得

Cannot unwrap to requested type [javax.sql.DataSource] 配置hibernate4和spring4时,出现错误,解决方法: 1.我去了spring4中的事务配置,数据库可以正常执行并访问.如下: <!-- 配置Hibernate  数据事务 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.Hibernat

-[AVCaptureMetadataOutput setMetadataObjectTypes:] – unsupported type found. Use -availableMetadataObjectTypes.

解决办法 [AVCaptureMetadataOutput setMetadataObjectTypes:]方法要在对话添加输出之后调用(swift: session?.addOutput(output))

iOS7后 苹果 二维码生成与扫描

本文是查阅网上资料和demo后整理出来的, 为了日后查阅以及其他人需要只用之前使用的是第三方库, 最近听说iOS7后, 苹果原生的二维码扫描功能效率更高, 于是学习了一下, 顺便也把生成加上. /** *  打开二维码 扫描 */ -(void)openCaptureMetada{ // Do any additional setup after loading the view, typically from a nib. //获取摄像设备 AVCaptureDevice * device =

Win7 SP1或安装补丁后安装VS2010出现无法安装FrameWork 4.0错误

出现这个问题,是因为 (1)你曾经手工安装了FrameWork 4.0或你安装的软件为你安装了FrameWork 4.0. (2)SP1补丁中包含了FrameWork 4.0,安装SP1之后FrameWork 4.0 即相当于安装到了电脑上(估计是不完全的,只提供了FrameWork 4.0运行的基础组件),所以VS 2010再安装FrameWork 4就会因当前已有的组件阻塞而无法安装,导致VS安装失败.(3)另外所有关于FrameWork 3.5和3.5.1的更新也会阻塞FrameWork

应用部署weblogic 报错Unsupported major.minor version 51.0的解决过程

应用部署weblogic 报错Unsupported major.minor version 51.0的解决过程 ? ? 1.部署提示错误:Unsupported major.minor version 51.0 1.1 错误现象如下图所示: 1.2 原因分析 类似错误均属于Java版本问题,即JDK版本过低,只要选择相对应的JDK版本编译即可.48,49,50.51.52是Java编译器内部的版本号:Unsupported major.minor version 52.0 对应于 JDK1.8

dede修改templets模板文件夹后,出现“无法在这个位置找到: ”错误的解决办法

修改templets模板文件夹的方法: 首先找到系统配置文件common.inc.php,此文件存放在Include目录下,打开common.inc.php来修改默认模板目录templets, 查找:$cfg_templets_dir = $cfg_cmspath.'/templets'; 将上面的红色部分修改为想要的文件夹名称,例如:xinfu800.com_moban,修改完之后需要手动将Templets重命名为:xinfu800.com_moban.上述所说的方法还可以修改插件目录.会员目

关于Oracle安装完毕后,登录时遇到的错误的解决的方法

1 提示无监听服务 解决方法:打开Net Configuration Assistant 依照提示删除现有的监听服务,然后又一次建立一个就可以. 2 SQL Plus登陆时提示username或password无效 原因:oracle_home\NETWORK\ADMIN 文件夹以下的sqlnet.ora文件里是否包括了 "SQLNET.AUTHENTICATION_SERVICES= (NTS)" . 该行意味着操作系统默觉得sysdba的绑定认证方式 解决方法:基于上面的原因,使用

Type cvc-complex-type.2.4.a: Invalid content was found starting with element &#39;build&#39;.错误的解决方法

项目突然间爆出了这样的问题: Description Resource Path Location Typecvc-complex-type.2.4.a: Invalid content was found starting with element 'build'. One of '{"http://maven.apache.org/POM/4.0.0":parent, "http://maven.apache.org/POM/4.0.0":name, "