2017-09-27 4 views
0

Je me sens comme je manque quelque chose d'important que je ne reçois pas d'erreur ou des valeurs nulles, mais chaque fois que je tente de récupérer mon image, il returns "" parce qu'il n'existe pas?Swift 3 ajouter une image aux documents et récupération

Voici comment je passe les données d'image:

URLSession.shared.dataTask(with: url! as URL, completionHandler:{ (data, response, error) in 
    //if download error 
    if error != nil{ 
    print(error!) 
    return 
} 
guard let imageData = UIImage(data: data!) else { return } 
DispatchQueue.main.async{ 
    self.imgPortrait.image = imageData 
    ImagePortrait().saveImageDocumentDirectory(image: imageData) 
} 

Les données sont affichées sur imgPortrait complètement bien. Voici le reste des fonctions où: /\(userUID)/\(CharacterSelection.sharedInstance.getActiveCharacterName()) est facultative. Quand il va chercher l'image et quand il l'enregistre, je peux confirmer que les chemins sont exactement les mêmes. Je me sens comme c'est comment je sauve l'image avec createFile, mais je ne suis pas sûr.

func saveImageDocumentDirectory(image: UIImage){ 
     if let userUID = Auth.auth().currentUser?.uid{ 
      let fileManager = FileManager.default 
      let paths = (getDirectoryPath() as NSString).appendingPathComponent("/\(userUID)/\(CharacterSelection.sharedInstance.getActiveCharacterName())/characterPortrait.png") 
      createDirectory(name: (getDirectoryPath() as NSString) as String) 
      let imageData = UIImagePNGRepresentation(image) 
      fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil) 
     } 
    } 

    func getDirectoryPath() -> String { 
     let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
     let documentsDirectory = paths[0] 
     return documentsDirectory 
    } 

    func getImage() -> String{ 
     if let userUID = Auth.auth().currentUser?.uid{ 
      let fileManager = FileManager.default 
      let imagePath = (self.getDirectoryPath() as NSString).appendingPathComponent("/\(userUID)/\(CharacterSelection.sharedInstance.getActiveCharacterName())/characterPortrait.png") 
      if fileManager.fileExists(atPath: imagePath){ 
       return imagePath 
      }else{ 
       print("No Image") 
       return "" 
      } 
     } 
     else{ 
      return "" 
     } 
    } 

    func createDirectory(name: String){ 
     let fileManager = FileManager.default 
     let paths = (getDirectoryPath() as NSString).appendingPathComponent(name) 
     if !fileManager.fileExists(atPath: paths){ 
      try! fileManager.createDirectory(atPath: paths, withIntermediateDirectories: true, attributes: nil) 
     }else{ 
      print("Directory is already created.") 
     } 
    } 

Merci d'avance!

Répondre

0

Eh bien, après quelques heures, je compris. On dirait que le répertoire n'a pas été créé. Résolu par:

func saveImageDocumentDirectory(image: UIImage){ 
     if let userUID = Auth.auth().currentUser?.uid{ 
      let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("\(userUID)_\(CharacterSelection.sharedInstance.getActiveCharacterName())_characterPortrait.png") 

      do { 
       try UIImagePNGRepresentation(image)?.write(to: fileURL, options: .atomic) 
      } catch { 
       print(error) 
      } 
     } 
    } 

    func getImage() -> UIImage{ 
     if let userUID = Auth.auth().currentUser?.uid{ 
      let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory 
      let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask 
      let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) 
      if let dirPath = paths.first 
      { 
       let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("\(userUID)_\(CharacterSelection.sharedInstance.getActiveCharacterName())_characterPortrait.png") 
       if let image = UIImage(contentsOfFile: imageURL.path){ 
        return image 
       } 
       else{ 
        print("Image isn't found.") 
        return UIImage(named: "default_portrait.png")! 
       } 

      } 
      else{ 
       print("Image isn't found.") 
       return UIImage(named: "default_portrait.png")! 
      } 
     } 
     else{ 
      print("Image isn't found.") 
      return UIImage(named: "default_portrait.png")! 
     } 
    }