iOS沙盒独立文件路径

iOS sandbox independent file path

我正在为 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不需要URL,文档文件夹保证存在。

Return 只有文件名而不是完整的 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 中的 NSURL 一样使用 NS... 类 如果有本地对应项 (URL)。