我也在CKAdset的客户端和fileUrl上缓存CKRecord。 fileUrl可以不时更改吗?资产/数据本身并没有改变。
答案 0 :(得分:3)
资产的fileURL
不会更改,但如果这是您从服务器下载的资产,则只保证在该位置存在数据,直到调用操作的完成块为止。在此之后,可以随时清理资产的备份文件以释放磁盘空间。
从服务器下载资产后,您应该将备份文件移动或复制到应用程序容器中的其他位置(如果您要保留它)。
答案 1 :(得分:0)
归档网址是一个完整路径,但由于iOS 8左右,您的应用用于存储其文件的容器网址会随时更改应用程序启动。
因此存档的网址错误。
这似乎是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: "")
}
}