Bra*_*n A 5 nsfilemanager ios uigraphicscontext
我有一个用例,需要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)")
}
Run Code Online (Sandbox Code Playgroud)
问题
FileManager
说文件不存在.第一次执行此操作时,在创建PDF 之前,FileManager可以检测到图像确实存在.但是,在我们从图像创建PDF 之后 - 即使图像PNG仍然未触及文档目录(请参阅app容器下面的图片以进行证明),FileManager
说PNG不存在?
题
为什么FileManager
忽略明显的事实并使我的应用程序无法运行?
Bra*_*n A 14
我的PDF和图像Documents
位于iOS文件系统中的目录下.root path
每次运行应用程序时,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答案,了解有关如何生成文档目录路径的提示.
在获得运行时文档目录的路径之后,只需将存储的路径添加到该文件的末尾,它应该如下所示:
file:///var/mobile/Containers/Data/Application/URID09RE-5711-TI70-1252-OP4G5JH3WDST/Documents/Media/theFileName.PNG
归档时间: |
|
查看次数: |
2890 次 |
最近记录: |