微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 iCloud 下载文件的正确方法

如何解决从 iCloud 下载文件的正确方法

我一直在尝试在我的应用中实现 iCloud 备份功能。一些 Stack Overflow 的回答和其他网站表示以下方法可行。但是,以下代码有时不起作用。下载进度要么固定为 0%,要么显示为 100%,但文件仍然是过时的本地副本。

func download(itemUrl: URL) {
    // Remove the local copy of the item
    try? FileManager.default.evictUbiquitousItem(at: itemUrl)

    // Request iCloud to start downloading the item
    try? FileManager.default.startDownloadingUbiquitousItem(at: itemUrl)

    // Watch for item status change
    // Create Metadata query to observe:
    // 1. The path of the file item
    // 2. The download progress of the file item
    let MetadataQuery = NSMetadataQuery()
    MetadataQuery.searchScopes = [NSMetadataQueryUbiquitousDataScope,NSMetadataQueryUbiquitousDocumentsScope]
    MetadataQuery.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [
            nspredicate(format: "%K == %@",NSMetadataItemPathKey,itemUrl.path),nspredicate(format: "%K >= 0",NSMetadataUbiquitousItemPercentDownloadedKey)
    ])

    // Called when the query result is updated
    NotificationCenter.default.addobserver(forName: .NSMetadataQueryDidUpdate,object: MetadataQuery,queue: nil,using: { notification in
        self.updateDownloadProgress(notification)
    })

    // Called when the query is finished
    NotificationCenter.default.addobserver(forName: .NSMetadataQueryDidFinishGathering,using: { notification in
        self.updateDownloadProgress(notification)
    })

    // Start the query
    MetadataQuery.start()
}

updateDownloadProgress 函数

func updateDownloadProgress(_ notification: Notification) {
    // Get download progress (%),// Stop the query when the progress reaches 100%
}

省略了错误处理。我假设 iCloud 中每分钟或每小时有一个请求限制,这阻止了此方法始终按我的意图工作。我应该做哪些改变才能使这项工作 100% 有效?任何帮助将不胜感激。

更新:这个问题是否与我没有使用 NSFileCoordinator 的事实有关?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。