2017-08-14 1 views
0

J'essaie d'amener un utilisateur à choisir une image de sa galerie ou de son appareil photo, puis à la télécharger dans l'application. Cela fonctionne, mais le seul problème est qu'il ne l'enregistre pas dans l'application. Dès que l'utilisateur ferme l'application, l'image choisie par l'utilisateur disparaît. Je n'ai pas non plus de fonction de sauvegarde, car je ne sais pas comment l'implémenter. J'utilise Xcode 8.3.2 dans Swift 3.0. Voici le code ci-dessous:Swift 3.0: Comment enregistrer l'image d'un utilisateur dans l'application à partir d'un imagePicker

import UIKit 

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    @IBOutlet weak var imageView: UIImageView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    @IBAction func chooseImage(_ sender: Any) { 

     let imagePickerController = UIImagePickerController() 
     imagePickerController.delegate = self 

     let actionSheet = UIAlertController(title: "Photo Source", message: "Choose a source", preferredStyle: .actionSheet) 

     actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler: { (action:UIAlertAction) in 

      if UIImagePickerController.isSourceTypeAvailable(.camera) { 
       imagePickerController.sourceType = .camera 
       self.present(imagePickerController, animated: true, completion: nil) 
      }else{ 
       print("Camera not available") 
      } 


     })) 

     actionSheet.addAction(UIAlertAction(title: "Photo Library", style: .default, handler: { (action:UIAlertAction) in 
      imagePickerController.sourceType = .photoLibrary 
      self.present(imagePickerController, animated: true, completion: nil) 
     })) 

     actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) 

     self.present(actionSheet, animated: true, completion: nil) 


    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     let image = info[UIImagePickerControllerOriginalImage] as! UIImage 

     imageView.image = image 

     picker.dismiss(animated: true, completion: nil) 
    } 

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     picker.dismiss(animated: true, completion: nil) 
    } 





    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 
+0

Si vous n'utilisez aucune base de données, utilisez simplement nsusedefault pour enregistrer l'image ou toutes les données localement sur le périphérique. et récupérer n'importe où dans l'application – cole

Répondre

1

Rappelez-vous pour enregistrer l'image que vous devez stocker l'image comme NSData

 // Code to store image 
    let defaults = UserDefaults.standard 

    // To save as data: 

    // From StoryBoard, if you want to save "image" data on the imageView of 
    // MainStoryBoard, following codes will work. 

    let image = UIImagePNGRepresentation(imageView.image!) as NSData? 
    defaults.set(image, forKey: "test") // saving image into userdefault 


    // for retrieving the image 

    if (UserDefaults.standard.object(forKey: "test") as? NSData) != nil { 
     let photo = UserDefaults.standard.object(forKey: "test") as! NSData 
     img2.image = UIImage(data: photo as Data) // img2 set your imageview on which you want photo to appear 

     // Now you can set img2.image 
    } 

Edité

Comment utiliser votre code

func imagePickerController(_ picker: UIImagePickerController, 
    didFinishPickingMediaWithInfo info: [String : Any]) { 
    let defaults = UserDefaults.standard 
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage 

    imageView.image = image 
    let saveImage = UIImagePNGRepresentation(image!) as NSData? 
    defaults.set(saveImage, forKey: "test") // saving image into userdefault 


    picker.dismiss(animated: true, completion: nil) 
} 

Et dans votre vue did load use méthode de récupération Si l'image existe et dans nsdata forma t alors seulement il montrera sauvegarder l'image. C'est tout.

+0

Cela me donne beaucoup d'erreurs. – Vinny

+0

Quel type d'erreur, pouvez-vous les poster ici. – cole

+0

variable avec getter/setter ne peut pas avoir une valeur initiale: déclaration prévue Utilisation d'identifiant sans solution « intFileRef » Utilisation d'identifiant sans solution propriété calculée 'defaults' doit avoir un type explicite Insérer « : <# Type #> » « let » déclarations ne peut pas être calculé propriétés Les déclarations consécutives sur une ligne doivent être séparées par ';' Insérer ';' Utilisation d'identifiant sans solution « println » Utilisation d'identifiant non résolu \t « par défaut » Utilisation d'identifiant sans solution « intFileRef » – Vinny

0

Vous pouvez enregistrer l'image dans votre répertoire document ci-dessous fonction

func saveImageDocumentDirectory(tempImage:UIImage){ 

    let documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 
    let fileURL = documentsDirectoryURL.appendingPathComponent("ImageName.png") 
     do { 
      try UIImagePNGRepresentation(tempImage)?.write(to: fileURL) 
     } catch { 
      print(error) 
     } 
} 

Pour récupérer l'image que vous pouvez utiliser

func getImage()->URL?{ 

    let documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 
    let fileURL = documentsDirectoryURL.appendingPathComponent("ImageName.png") 

    if FileManager.default.fileExists(atPath: fileURL.path){ 
     return fileURL 
    }else{ 
     return nil 
    } 
} 

Vous pouvez utiliser le nom que vous aimez et l'image du magasin avec un nom différent de magasin image multiple.

+0

J'ai ajouté ces deux fonctions, mais l'image téléchargée par l'utilisateur disparaît quand je ferme l'application et la rouvre. – Vinny

+0

est l'une des erreurs de lancement de fonction? –

+0

vous obtiendrez l'URL de la fonction getImage(), vous devez obtenir l'image –