首页 > 解决方案 > 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
    }
}

标签: iosswiftuiimage

解决方案


停止搜索,没有办法,这是有充分理由的:数据的安全性。

您总是必须使用 获取文档目录的 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...类。NSURLURL


推荐阅读