2017-09-11 109 views
0

這裏是我的功能來保存圖像。NSFileManager在創建文件時失敗

static func getDirectoryPath() -> String { 
    let path = (NSSearchPathForDirectoriesInDomains(.picturesDirectory, .userDomainMask, true))[0] 
    return path 
} 

static func savePhoto(with path: String, image: UIImage) { 
    let fM = FileManager.default 
    let path = getDirectoryPath() + path 
    let data = UIImageJPEGRepresentation(image, 0.5) 
    let success = fM.createFile(atPath: path, contents: data, attributes: nil) 
    print("File creation was \(success)") 
} 

,然後我每次調用它像這樣

 let path = "/SpotCheck_\(spot.name)_Photo\(indx).jpg" 
     PhotoManager.savePhoto(with: path, image: photo) 

當我打電話創建文件返回false,照片不會被保存。

編輯:問題是需要成爲documentDirectory而不是picturesDirectory的第二行。如下圖所示:

let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))[0] 
+0

這是iOS還是macOS?爲什麼使用'FileManager'而不是'Data write'方法? – rmaddy

+0

你檢查過你的沙箱配置嗎? – Bob

+0

這是針對iOS的,我不確定使用哪種方法(文件管理器或寫入)。我可以嘗試查看寫入方法是否可以做我想做的事,但是你有什麼想法爲什麼文件管理器不起作用?也有理由使用一種方法而不是另一種。 – LoganHenderson

回答

5

iOS應用程序在沙箱中運行。您無法寫入圖片文件夾。

如果你想添加一個圖片到用戶的照片庫,然後使用PHPhotoLibrary或只是UIImageWriteToSavedPhotosAlbum

如果您只是想將圖像保存在您自己的應用程序中,然後將文件存儲在文檔文件夾中。

僅供參考 - 使用iOS的NSSearchPathForDirectoriesInDomains時,唯一有用的目錄是:

  • libraryDirectory
  • documentDirectory
  • cachesDirectory
  • applicationSupportDirectory

所有的人都只能在有用蘋果系統。

+0

我可以將圖像寫入iOS上的文檔目錄嗎?我想在我的應用程序中保留照片,但不會將它們保存到用戶照片庫中。 – LoganHenderson

+2

完全不同。是的,Documents文件夾是每個應用程序沙箱的一部分,這是應用程序編寫數據的正常位置。我已經爲此更新了我的答案。 – rmaddy