ios - iOS沙箱独立文件路径
问题描述
我正在为 iOS 开发一个简单的应用程序。我真的很惊讶,当像下面的代码那样编写图像时,路径在应用程序重新启动之前保持有效。应用程序重新启动后,会创建新的沙箱,这会使之前的路径无效。我正在尝试找到一种拥有沙盒独立文件路径的方法。是否有可能不经过解析周期(即 FileManager.default.url ...)?
static func saveToDocument(name: String, image: UIImage) -> String? {
guard let data = image.pngData() else { return nil; }
guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
return nil
}
do {
let file = directory.appendingPathComponent("\(name).png");
try data.write(to: file!)
return file?.absoluteString
} catch {
return nil
}
}
解决方案
停止搜索,没有办法,这是有充分理由的:数据的安全性。
您总是必须使用 获取文档目录的 URL FileManager.default.url(for
,这并不昂贵。
Guard
如果不需要 URL,则可以保证文档文件夹存在。
只返回文件名而不是完整的 URL 字符串,我建议让函数throw
交出所有错误。
enum FileError : Error {
case noData
}
static func saveToDocument(name: String, image: UIImage) throws -> String {
guard let data = image.pngData() else { throw FileError.noData }
let directory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let fileURL = directory.appendingPathComponent("\(name).png")
try data.write(to: fileURL)
return fileURL.lastPathComponent
}
如果有本地对应物 ( ) ,则永远不要使用Swift 中的NS...
类。NSURL
URL
推荐阅读
- javascript - 应用一般更新模式时 D3.js 折线图未正确更新
- python - Python 3 和 GUI Tkinter 徽标插入
- excel - 无法使用现有过滤器粘贴值
- c# - Linq-to-entities 到普通 linq
- c# - foreach循环后如何设置原始值
- php - CURL POST 请求不适用于标头
- javascript - TypeError: 将循环结构转换为 JSON\n
- postgresql - 如何从 PostgreSQL 12.5 版本的存储过程中获取多个结果集?
- c# - 如何在 c# 中使用 lua 和 redis 和 stackexchange 创建高性能计数器
- mongodb - 如何将 F# 中的 MongoDB Bson Dosument 映射到泛型类型