获取从文档目录的图像而不是文件路径斯威夫特3

问题描述:

我这是怎么保存的图像获取从文档目录的图像而不是文件路径斯威夫特3

let format = DateFormatter() 
    format.dateFormat="MMMM-dd-yyyy-ss" 
    let currentFileName = "\(format.string(from: Date())).img" 
    print(currentFileName) 

    // Save Images 
    let fileMgr = FileManager.default 
    let dirPath = fileMgr.urls(for: .documentDirectory, in: .userDomainMask)[0] 
    let imageFileUrl = dirPath.appendingPathComponent(currentFileName) 



     do { 

      try UIImagePNGRepresentation(returnedImages)!.write(to: imageFileUrl) 

      print("Image Added Successfully") 

    } catch { 

     print(error) 

     } 

下面的代码,我使用的检索图像,但我得到的网址,而不是图像文件来填充实现代码如下。任何帮助,将不胜感激

let fileManager = FileManager.default 
    let imageUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask) [0].appendingPathComponent("img") 

    print("Your Images:\(imageUrl)") 
+0

我认为你可以使用的UIImage(contentsOfFile:yourUrl)来获得图像从这个网址 – 3stud1ant3

+0

@ 3stud1ant3感谢您的回答,但是当我按照你的建议这样做时:let image:UIImage = UIImage(contentsOfFile:imageUrl)。我收到错误“无法将类型'URL'的值转换为期望的参数类型'String'” –

+0

您收到了什么错误? – 3stud1ant3

这只是因为您的图像的名称是无效的。使用调试器找到imageUrl的确切值,我敢打赌它就是这样的.../Documents/img。你想要的更像是.../Documents/Sep-04-2017-12.img

你必须在视图控制器中存储currentFileName,以便稍后可以参考它。

此外,您的命名策略非常脆弱。许多图像可能会共享一个名称。


如果你有一个文件夹完整图像,你可以遍历该文件夹在找回img文件:

let fileManager = FileManager.default 
let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] 
let directoryContents = try! fileManager.contentsOfDirectory(at: documentDirectory, includingPropertiesForKeys: nil) 
for imageURL in directoryContents where imageURL.pathExtension == "img" { 
    if let image = UIImage(contentsOfFile; imageURL.path) { 
     // now do something with your image 
    } else { 
     fatalError("Can't create image from file \(imageURL)") 
    } 
} 
+0

感谢您的回复。你是对的,这就是我得到的价值。但是,每当图像被保存时,他们就会保存像这样的“September-04-2017-11.img”。我试图在一个单独的视图控制器中检索图像。 –

+0

然后[迭代](https://developer.apple.com/documentation/foundation/filemanager/1414584-contentsofdirectory)您的Documents文件夹并选择所有'.img'文件。或者您可以将文件名数组传递给第二个控制器 –

+0

每当我尝试迭代文档文件夹时,我都会收到“The folder”.img“不存在”。 –