gpt4 book ai didi

ios - FileManager 说文件不存在

转载 作者:可可西里 更新时间:2023-11-01 04:13:14 24 4
gpt4 key购买 nike

我有一个用例需要将 UIImage 保存到文档目录 - 然后需要将 UIImage 转换为 PDF 并保存到文档目录.

转换为 PDF 的代码

var filePath = NSString(string: self.selectedMedia!.imagePath!)

if FileManager().fileExists(atPath: filePath as String) {

filePath = filePath.deletingPathExtension as NSString
filePath = NSString(string: filePath.appendingPathExtension("PDF")!)

if let image = UIImage(data: self.selectedMedia?.image! as! Data) {

let rect:CGRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)

UIGraphicsBeginPDFContextToFile(filePath as String, rect, nil);
UIGraphicsBeginPDFPageWithInfo(rect, nil);
UIGraphicsGetCurrentContext();
image.draw(in: rect)
UIGraphicsEndPDFContext();

self.selectedMedia?.imagePath = filePath as String

CoreData.save()
}

self.showPDFEditor()
}
else {
print("Missing File At Path \(filePath)")
}

问题

FileManager 表示文件不存在。第一次执行时,我们创建 PDF 之前,FileManager可以检测到图像PDF确实存在。但是之后我们从图像创建 PDF - 即使图像 PNG 仍然在文档目录中未被触及(参见下面的应用程序容器图像以获取证据),FileManager 说PNG 不存在?

enter image description here

问题

为什么 FileManager 会忽略显而易见的事实并阻止我的应用程序正常运行?

最佳答案

从不存储完整的文件路径

我的 PDF 和图像位于 iOS 文件系统的 Documents 目录下。每次您运行应用程序时,iOS 都会将根路径 更改为文档目录。因此,像上面那样保存 imagePath 就可以正常工作,直到我重新启动应用程序。那是因为我正在将 整个 路径存储到我的 selectedMedia 对象。

现在 - file:///var/mobile/Containers/Data/Application/7A31EDFD-8644-45A5-8381-FE189E27D6E5/Documents/

以后可能会这样 - file:///var/mobile/Containers/Data/Application/URID09RE-5711-TI70-1252-OP4G5JH3WDST/Documents/

查看 Application/someLongNumber/ 有何不同。这就是为什么当您检查一个文件是否在您的文档目录中并且实际上就在那里,但根 路径 已更改的原因。


你应该做什么?

不是存储整个文件路径,而是存储 来自 文档目录的子路径。所以我所做的是在名为 Media 的文档目录中创建了一个子文件夹,我将文件保存到该文件夹​​中,而我存储到我的对象上的 imagePath 的路径将是 Media/theFileName.PNG.

所以您需要做的是在运行时生成/Documents 目录的路径。我怎么强调这部分都不为过。这将保证您每次都访问实际的文档目录。看看这个 SO answer有关如何生成文档目录路径的提示。

在您获得运行时文档目录的路径后,只需将您存储的路径添加到该路径的末尾,它应该如下所示:

file:///var/mobile/Containers/Data/Application/URID09RE-5711-TI70-1252-OP4G5JH3WDST/Documents/Media/theFileName.PNG

关于ios - FileManager 说文件不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40138827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com