swift - 为什么同一张本地图片的图片地址不一样?
问题描述
当我UIImagePickerController
通过此代码从中选择图像并退出文件路径时:
if let fileURL = info[.imageURL] as? NSURL {
}
图片的路径是"file:///private/var/mobile/Containers/Data/Application/3CE5CD49-4781-44B3-B021-77D745C97FDC/tmp/193E1106-30F0-4150-B230-7EC1B1EFB4B7.jpeg"
当我在Photos framework
该代码的帮助下停用同一文件的文件路径时
asset.requestContentEditingInput(with: nil, completionHandler: { (editingInput, _) in
editingInput?.fullSizeImageURL
})
图片的路径是"file:///var/mobile/Media/DCIM/108APPLE/IMG_8760.JPG"
那么为什么同一个文件的图片 URL 不同呢?
解决方案
从 iOS 8 开始,每次重新启动应用程序时,应用程序沙箱的绝对 URL 都会更改。因此,您永远不应该保存视频的绝对网址。每次重新启动应用程序时,保存视频名称并重新创建 URL。
let pathComponent = "pack\(self.packID)-\(selectRow + 1).mp4"
let directoryURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let folderPath: URL = directoryURL.appendingPathComponent("Downloads", isDirectory: true)
let fileURL: URL = folderPath.appendingPathComponent(pathComponent)
一旦你有 fileURL 查找文件,你会发现在之前的启动中下载的文件。
每次用户启动应用程序时,iOS 都会为应用程序创建一个新的沙盒。因此绝对 URL 会非常。但 iOS 会像以前一样负责设置沙盒内的所有文件夹和内容。因此,尽管 SandBox 的基本 url 发生变化,但所有内容的相对 url 将保持不变。
因此,建议永远不要将绝对网址保存到任何文件夹:) 希望它有所帮助
推荐阅读
- c# - C#动态编译器,在内存中编译时得到标准输出
- matlab - 在 MATLAB 中进行音高转换的最佳方法
- wso2 - 有没有办法按顺序触发计划任务?
- qt - 使用静态库构建独立的 qt 应用程序 - 缺少配置命令
- microsoft-edge - 从 Windows 10 build 1809 上的快捷方式以私密模式启动 microsoft edge
- oracle - 错误:将数组传递给另一个过程时出现“错误的数字或类型或参数”
- vxworks - 如何在 VxWorks 7.0 中将 PCI / PCIe 虚拟映射到物理内存?
- c# - 如何覆盖方法保存模板方法模式
- mysql - mysql docker容器的性能问题
- node.js - 如何编辑节点模块