2017-09-27 24 views
0

오류나 null 값을받지 못해서 뭔가 중요한 것을 놓치고있는 것처럼 느껴지지만 언제든지 내 이미지를 검색하려고 시도합니다. 존재하지 않기 때문에 returns ""?스위프트 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")! 
     } 
    }