2017-07-09 1 views
1

J'essaie de travailler sur un appareil photo personnalisé. C'est dans l'enfance. J'ai utilisé quelques tutoriels en ligne mais depuis les dernières modifications, le code est obsolète. J'ai fait de mon mieux pour l'ajuster. Cependant, j'ai frappé le mur suivant. Quand je suis dans l'application, je peux prendre la photo et voir la photothèque, mais quand je prends la photo et la sélectionne, elle n'apparaît pas, donc quand j'appuie sur le bouton de sauvegarde, l'application s'écrase et la console tout en déballant une valeur facultative.La caméra Swift 3 ne sauvegarde pas

Toute aide sur la correction de ce problème et l'obtention de l'image à afficher dans l'interface utilisateur pour l'enregistrement serait grandement appréciée. Voici le code:

import UIKit 

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationBarDelegate { 
    let imagePicker = UIImagePickerController() 
    @IBOutlet weak var pickedImage: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate 
    } 

    @IBAction func camerabuttonaction(_ sender: UIButton) { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera){ 
      let imagePicker = UIImagePickerController() 
      imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate 
      imagePicker.sourceType = UIImagePickerControllerSourceType.camera; 
      imagePicker.allowsEditing = false 
      self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

    @IBAction func photolibraryaction(_ sender: UIButton) { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){ 
      let imagePicker = UIImagePickerController() 
      imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate 
      imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary; 
      imagePicker.allowsEditing = true 
      self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){ 
     var chosenImage = UIImage() 
     chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
     pickedImage.contentMode = .scaleAspectFit 
     pickedImage.image = chosenImage 
     dismiss(animated:true, completion: nil) 
    } 

    func saveNotice(){ 
     let alertController = UIAlertController(title: "Image Saved!", message: "Your picture was successfully saved.", preferredStyle: .alert) 
     let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) 
     alertController.addAction(defaultAction) 
     present(alertController, animated: true, completion: nil) 
    } 

    @IBAction func saveaction(_ sender: UIButton) { 
     let imageData = UIImageJPEGRepresentation(pickedImage.image!, 0.6) 
     let compressedJPEGImage = UIImage(data: imageData!) 
     UIImageWriteToSavedPhotosAlbum(compressedJPEGImage!, nil, nil, nil) 
     saveNotice() 
    } 
} 

Répondre

1

Please Check this in your code storyBoard if you replace Code

et reconnectez le IBAction en story-board pour éviter tout accident

S'il vous plaît Remplacez votre code avec ci-dessous code de sauvegarde et d'afficher l'image de travail

import UIKit 

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    var imagePicker = UIImagePickerController() 
    @IBOutlet weak var pickedImage: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     imagePicker.delegate = self 
    } 

    @IBAction func camerabuttonaction(_ sender: UIButton) { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera){ 
      imagePicker = UIImagePickerController() 
      imagePicker.delegate = self 
      imagePicker.sourceType = UIImagePickerControllerSourceType.camera; 
      imagePicker.allowsEditing = false 
      self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

    @IBAction func photolibraryaction(_ sender: UIButton) { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){ 
      imagePicker = UIImagePickerController() 
      imagePicker.delegate = self 
      imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary; 
      imagePicker.allowsEditing = true 
      self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){ 
     var chosenImage = UIImage() 
     chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
     pickedImage.contentMode = .scaleAspectFit 
     pickedImage.image = chosenImage 
     dismiss(animated:true, completion: nil) 
    } 

    func saveNotice(){ 
     let alertController = UIAlertController(title: "Image Saved!", message: "Your picture was successfully saved.", preferredStyle: .alert) 
     let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) 
     alertController.addAction(defaultAction) 
     present(alertController, animated: true, completion: nil) 
    } 

    @IBAction func saveaction(_ sender: UIButton) { 
     let imageData = UIImageJPEGRepresentation(pickedImage.image!, 0.6) 
     let compressedJPEGImage = UIImage(data: imageData!) 
     UIImageWriteToSavedPhotosAlbum(compressedJPEGImage!, nil, nil, nil) 
     saveNotice() 
    } 
} 
+0

Remerciez vous tellement pour cela. Je peux voir l'image maintenant mais quand je clique sur sauvegarder l'application se bloque et se ferme. Ceci est le code que je reçois dans la console de débogage: ** ViewController savebuttonaction:]: sélecteur non reconnu envoyé à l'instance 0x157e0eca0 2017-07-10 23: 00: 28.511302 + 0100 Cam Stats [1983: 612888] *** Application de terminaison due à l'exception uncaught 'NSInvalidArgumentException', raison: '- [Cam_Stats.ViewController savebuttonaction:]: sélecteur non reconnu envoyé à l'instance 0x157e0eca0' ** – Purelaise

+0

s'il vous plaît vérifier si ce bouton est connecté à l'ibaction que vous avez fourni car à mon extrémité ce code fonctionne bien, j'ai vérifié sur l'appareil et le simulateur aussi. et si vous faites toujours face au même problème, supprimez ibAction du bouton du storyboard et reconnectez-vous à ibaction made. si toujours une erreur se produit, je vais partager mon projet avec vous et aussi vérifier les clés dans info.plist pour l'accès caméra et galerie NscameraUsage et NsPhotoLibrary –

+0

Merci, j'ai tout vérifié à nouveau et rediffuser mais le problème persiste. Il charge AppDelagate.swift et charge la ligne suivante en surbrillance ** redclass AppDelegate: UIResponder, UIApplicationDelegate {** ne sait pas où est le problème? – Purelaise