2016-05-08 13 views
5

Ich versuche Code zu implementieren, mit dem Bilder von der Frontkamera aufgenommen und geteilt werden können. jedes Mal wenn ich versuche jedoch auf „ein Foto aufnehmen“, meine app stürzt mit Warnung folgenden Konsole:Schwerwiegender Fehler bei der Aufnahme von Fotos von der Frontkamera mit 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 

ich meinen Code bin Entsendung unter:

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 
      } 

     } 
    } 
} 

Wie kann ich das Problem beheben?

Antwort

1

Sie müssen die Sitzung starten, bevor Sie ein Foto machen.

captureSession.startRunning()