iOS7後使用AVCapture出現 unsupported type found. Use -availableMetadataObjectTypes錯誤的解決

來源:互聯網
上載者:User

標籤:style   class   blog   code   http   tar   

在整合掃描二維碼功能時候,我使用的是系統在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的對象後,方可對其進行設定;

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.