5

我也在 CKAsset 的客户端和 fileUrl 上缓存 CKRecord。fileUrl 可以不时更改吗?资产/数据本身并没有改变。

4

2 回答 2

6

资产的fileURL不会更改,但如果这是您从服务器下载的资产,则仅保证数据存在于该位置,直到调用操作的完成块。在那之后,可以随时清理资产的备份文件以释放磁盘空间。

从服务器下载资产后,如果您想保留它,您应该将支持文件移动或复制到应用程序容器中的另一个位置。

于 2015-04-26T15:51:46.647 回答
0

存档的 URL 是完整路径,但由于 iOS 8 左右,您的应用程序用来存储其文件的容器 URL 会在每次应用程序启动时发生变化。

所以存档的网址是错误的。

这似乎是 CKAssets 归档给我的方式中的一个错误,它们应该归档和取消归档相对于应用程序容器的部分路径。不是完整的路径。

我想我会归档一个雷达。

编辑:这是一个解决方案:

extension CKAsset {
    var url: URL? {
        let path = fileURL.path
        if FileManager.default.fileExists(atPath: path) {
            return fileURL
        } else if let index = path.range(of: "/Library/Caches/") {

            // archived CKAssets store full-path URLs but since iOS 8 or so
            // the path of our container (home-dir) changes every time we are
            // started. So the full path is useless. Try to mangle it.

            let suffix = String(path.suffix(from: index.upperBound))
            let adjustedUrl = URL.caches/suffix
            if FileManager.default.fileExists(atPath: adjustedUrl.path) {
                return adjustedUrl
            }
        }
        return nil
    }
}

public extension URL {
    static var caches: URL {
        return FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first ?? URL(fileURLWithPath: "")
    }
}
于 2018-06-17T23:48:59.783 回答