2017-09-11 102 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