长期运行的 CKAsset 上传错误
Posted
技术标签:
【中文标题】长期运行的 CKAsset 上传错误【英文标题】:CKAsset Upload error with Long Lived Operations 【发布时间】:2021-04-13 09:58:16 【问题描述】:当用户重新连接到互联网后,当应用尝试在长期操作中上传 CKAsset 时,我收到错误消息。重新打开应用时,长期运行的操作会返回此错误。
CKErrorCode(_nsError:
可能无法保存记录 资产 , 谁的文件URL file:///var/mobile/Containers/Data/Application/UUID/Documents/rawContent 无法访问">)
我可以访问该路径并且是公开的。是什么导致了这个错误?
【问题讨论】:
【参考方案1】:当您重播/重新启动文件时,CKOperation
无法再访问您要上传的文件的 url,您可能会收到此错误。您可以通过在启动初始操作时将 url 存储为书签来解决此问题,如下所示:
if let data = try? url.bookmarkData(options: .minimalBookmark, includingResourceValuesForKeys: nil, relativeTo: nil)
UserDefaults.standard.set(data, forKey: "url")
在设置并重新启动长期运行的操作之前,请像这样恢复书签:
var isStale = false
guard let data = UserDefaults.standard.data(forKey: "url"),
let url = try? URL(resolvingBookmarkData: data, bookmarkDataIsStale: &isStale),
url.startAccessingSecurityScopedResource() else
return
将此包含在重新启动操作的最终完成处理程序中:
url.stopAccessingSecurityScopedResource()
【讨论】:
恢复的长寿命操作仍有旧 URL 的资产,并表示无法访问。在这种情况下,是否应该取消它并使用从书签中恢复的新网址创建新网址? @EugeneBelyakov 是的,如果由于您没有存储书签而无法在回放中访问该 url,或者恢复书签失败,那么唯一的选择就是取消操作。以上是关于长期运行的 CKAsset 上传错误的主要内容,如果未能解决你的问题,请参考以下文章
无法将 CKAsset 类型的值分配给 UIImage 类型
服务器记录中的 CKAsset 不包含 fileURL,甚至无法检查 nil