gpt4 book ai didi

swift - 是 iCloud 还是我的代码?

转载 作者:搜寻专家 更新时间:2023-10-31 23:10:38 25 4
gpt4 key购买 nike

我正在使用这个问题的稍微更新的代码:Method for downloading iCloud files? Very confusing?

这是代码的摘录:

private func downloadUbiquitiousItem(atURL url: URL) -> Void {
do {
try FileManager.default.startDownloadingUbiquitousItem(at: url)
do {
let attributes = try url.resourceValues(forKeys: [URLResourceKey.ubiquitousItemDownloadingStatusKey])
if let status: URLUbiquitousItemDownloadingStatus = attributes.allValues[URLResourceKey.ubiquitousItemDownloadingStatusKey] as? URLUbiquitousItemDownloadingStatus {
if status == URLUbiquitousItemDownloadingStatus.current {
self.processDocument(withURL: url)
return
} else if status == URLUbiquitousItemDownloadingStatus.downloaded {
self.processDocument(withURL: url)
return
} else if status == URLUbiquitousItemDownloadingStatus.notDownloaded {
do {
//will go just fine, if it is unnecessary to download again
try FileManager.default.startDownloadingUbiquitousItem(at: url)
} catch {
return
}
}
}
} catch {

}

//only happens if the try does not fail
self.documentsQuery = NSMetadataQuery()
self.documentsQuery.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
self.documentsQuery.valueListAttributes = [NSMetadataUbiquitousItemPercentDownloadedKey,NSMetadataUbiquitousItemDownloadingStatusKey]
self.documentsQuery.predicate = NSPredicate(format: "%K like 'backup.json'", argumentArray: [NSMetadataItemFSNameKey])

NotificationCenter.default.addObserver(self, selector: #selector(self.queryUpdate(notification:)), name: NSNotification.Name.NSMetadataQueryDidUpdate, object: self.documentsQuery)

DispatchQueue.main.async {
if self.documentsQuery.start() {
if self.restoreHUD != nil {
self.restoreHUD.show(animated: true)
//timeout for restoring
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(30), execute: {
if self.restoreHUD != nil {
self.restoreHUD.hide(animated: true)
}
})
}
}
}
} catch {
//file does not exist in icloud most likely
}
}

所以这有时会起作用,但它确实不稳定,例如我们测试了以下情况:

  1. 备份到 iCloud
  2. 检查我们在设置 -> iCloud -> 存储 -> 管理存储 -> MyApp -> backup.json 中是否有有效文档
  3. 强制首次启动,以便应用恢复 backup.json(也就是执行上面的代码)

这有时有效,有时无效。有时查询不会更新。

我们还测试了以下场景:

  1. 通过设置从 iCloud 手动删除备份
  2. 卸载应用并重新安装以提供首次启动
  3. startDownloadingUbiquitousItem 函数似乎没有抛出,即使 iCloud 中没有任何内容,因为我认为 iCloud 仍然没有同步本地文件或删除本地数据,但它也没有下载正确...但状态为未下载。

也许用户不应该通过设置删除这些东西?我想知道我的代码是否遗漏了可能发生的情况,或者这个 API 是否真的对开发人员不方便...

谢谢!

最佳答案

可能,我们在“主线程”中调用添加通知。

NotificationCenter.default.addObserver(self, selector: #selector(self.queryUpdate(notification:)), name: NSNotification.Name.NSMetadataQueryDidUpdate, object: self.documentsQuery)

关于swift - 是 iCloud 还是我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com