我正在为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
}
}
停止搜索,没有办法,并且有充分的理由:数据的安全性。
你总是要用FileManager.default.url(for
获取文件目录的URL,它并不贵。
Guard
ing 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
}
如果有本地对应物(NS...
),切勿在Swift中使用像NSURL
这样的URL
类。