iOS沙箱独立文件路径

问题描述 投票:0回答:1

我正在为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
    }
}
ios swift uiimage
1个回答
1
投票

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

你总是要用FileManager.default.url(for获取文件目录的URL,它并不贵。

Guarding 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类。

© www.soinside.com 2019 - 2024. All rights reserved.