2016-05-08 16 views
5

Si tenta di implementare il codice che consentirà di acquisire immagini dalla fotocamera frontale e quindi condividerle. Tuttavia, ogni volta che provo a "scattare una foto", il mio applicazione si blocca con seguente avviso: consoleErrore irreversibile quando si tenta di acquisire foto dalla fotocamera frontale utilizzando AVFoundation

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[AVCaptureStillImageOutput captureStillImageAsynchronouslyFromConnection:completionHandler:] - inconsistent state.' 
*** First throw call stack: 
(0x181b1ee38 0x181183f80 0x188265074 0x10003d578 0x10003d748 0x10003c380 0x10003c3d8 0x186ca0ad0 0x186ca0a4c 0x186c88740 0x186ca033c 0x186c58b0c 0x186c994f8 0x186c98af4 0x186c68f4c 0x186c67528 0x181ad5124 0x181ad4bb8 0x181ad28b8 0x1819fcd10 0x1832e4088 0x186cd1f70 0x100036880 0x18159a8b8) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

sto postando il mio codice qui sotto:

import UIKit 
import AVFoundation 

class CameraSnapViewController: UIViewController { 

    let captureSession = AVCaptureSession() 
    let stillImageOutput = AVCaptureStillImageOutput() 

    let cameraPicker = UIImagePickerController() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.addPhotoCapturingFunctionality() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func cameraButtonPressed(sender: UIButton) { 
     self.takePhoto() 
    } 

} 

extension CameraSnapViewController { 
    func addPhotoCapturingFunctionality() { 
     guard let device = AVCaptureDevice.devices().filter({ $0.hasMediaType(AVMediaTypeVideo) && $0.position == .Front }).first as? AVCaptureDevice else { fatalError("No front facing camera found") } 

     do { 
      let input = try AVCaptureDeviceInput(device: device) 
      captureSession.addInput(input) 
      captureSession.sessionPreset = AVCaptureSessionPresetPhoto 
      stillImageOutput.outputSettings = [AVVideoCodecKey:AVVideoCodecJPEG] 
      if captureSession.canAddOutput(stillImageOutput) { 
       captureSession.addOutput(stillImageOutput) 
      } 
     } catch let error as NSError { 
      print(error) 
     } 

    } 

    func takePhoto() { 
     if let videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) { 

      stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) { (imageDataSampleBuffer, error) -> Void in 
       let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer) 
       // TODO: Sharing 
      } 

     } 
    } 
} 

Come posso risolvere il problema?

risposta

1

È necessario avviare la sessione prima di scattare una foto.

captureSession.startRunning()

Problemi correlati