2017-09-27 2 views
0

エラーやヌル値が表示されないので、何かメジャーが欠けているような気がしますが、いつでも画像を取得しようとしていますreturns ""存在しないためですか?Swift 3ドキュメントに画像を追加して取得する

これは、私は、画像データを渡しています方法です:

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) 
} 

データは完全に罰金imgPortraitに表示されています。残りの機能は次のとおりです。/\(userUID)/\(CharacterSelection.sharedInstance.getActiveCharacterName())はオプションです。それが画像を取得するために行くとそれを保存するとき、私はパスがまったく同じであることを確認することができます。私はcreateFileで画像を保存しているように感じていますが、わかりません。

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.") 
     } 
    } 

ありがとうございます!

答えて

0

数時間後、私はそれを理解しました。ディレクトリが作成されていないように見えます。それによって解決した:

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")! 
     } 
    } 
関連する問題