2016-09-27 5 views
0

Я использовал AVCaptureMetadataOutputObjectsDelegate для сканера штрих-кода, и он отлично работал. Но с iOS 10 он больше не работает. Я всегда получаю ошибку EXC_BAD_ACCESS, когда я открываю barcodescanner с помощью кнопки. Ошибка возникает, когда я добавляю вывод в сеанс.AVcaptureMetadataOutput не работает в ios10

Может кто-нибудь помочь мне, пожалуйста? Я действительно пробовал все, и это сводит меня с ума.

+0

Добавь свой код! Дайте более подробную информацию! –

ответ

1

Вот мой Objective-C, который работает отлично под IOS 10. IIRC я ​​думаю, что у меня были проблемы, если вары были локальными только к методу. Убедитесь, что все ваши вары - это свойства.

- (void)initialiseVideoSession { 

    _session = [[AVCaptureSession alloc] init]; 
    _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

    NSError *error = nil; 

    _input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error]; 

    if (_input) { 

     [_session addInput:_input]; 

     _output = [[AVCaptureMetadataOutput alloc] init]; 
     [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; 
     [_session addOutput:_output]; 

     _output.metadataObjectTypes = [_output availableMetadataObjectTypes]; 

     _prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session]; 
     _prevLayer.frame = self.view.bounds; 
     _prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
     [self.view.layer addSublayer:_prevLayer]; 

     [_session startRunning]; 

    } else { 
     // Error 
    } 
} 
+0

Спасибо, помощник. Это прекрасно работает. –

0

Здесь моя линия, которая работает в настоящее время.

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 
    // Get the first object from the metadataObjects array. 
    if let barcodeData = metadataObjects.first { 
     // Turn it into machine readable code 
     let barcodeReadable = barcodeData as? AVMetadataMachineReadableCodeObject; 
     if let readableCode = barcodeReadable { 
      // Send the barcode as a string to barcodeDetected() 
      barcodeDetected(readableCode.stringValue); 
     } 
     // Vibrate the device to give the user some feedback. 
     AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 
     // Avoid a very buzzy device. 
     session.stopRunning() 
    } 
} 
Смежные вопросы