1

我正在尝试从我的一个应用程序将文件推送到 iCloud,但有时无法跟踪文件是否已经在 iCloud 上。在将文件标记为普遍存在后,我有一个方法可以通过 NSMetadataQuery 定期检查文件的状态。当我得到结果时,我使用这些键来获取文件的状态:

NSNumber *isUploaded = [file valueForAttribute:NSMetadataUbiquitousItemIsUploadedKey];
NSNumber *isUploading = [file valueForAttribute:NSMetadataUbiquitousItemIsUploadingKey];
NSNumber *uploadPercent = [file valueForAttribute:NSMetadataUbiquitousItemPercentUploadedKey];

这似乎有时有效,但在其他时候 isUploaded 值为 0 而 isUploading 值也为 0!uploadPercent 值实际上始终为 0。当我进入设备的“设置”应用程序并检查我的应用程序的文件时,这些文件已经在那里列出,所以我不确定为什么“NSMetadataUbiquitousItemIsUploadedKey”键会返回 0?

任何帮助表示赞赏!谢谢!

4

1 回答 1

5

我正在尝试做同样的事情。根据 iCloud 指南,尝试使用 NSURLUbiquitousItemIsUploadedKey 而不是 NSMetadataUbiquitousItemIsUploadedKey。让我知道这是否适合你。我仍然无法让这个工作。这是指南中的部分:

确定文件或目录的传输状态

您写入 iCloud 容器目录的项目会尽快自动传输到 iCloud 服务器。但是,根据网络和设备类型,文件可能不会立即上传到服务器或下载到设备。在需要了解文件状态的情况下,可以使用 的getResourceValue:forKey:error:方法NSURL检索以下属性之一的值:

  • NSURLIsUbiquitousItemKey— 指示项目是否存储在 iCloud 中。

  • NSURLUbiquitousItemIsDownloadedKey— 指示当前版本的项目是否已下载并可访问。

  • NSURLUbiquitousItemIsDownloadingKey— 指示是否正在下载项目的当前版本并且尚不可用。

  • NSURLUbiquitousItemPercentDownloadedKey— 对于正在下载的项目,指示已下载更改的百分比。您可以使用此值来更新进度条。

  • NSURLUbiquitousItemIsUploadedKey— 表示本地所做的更改已成功上传到 iCloud 服务器。

  • NSURLUbiquitousItemIsUploadingKey— 表示本地所做的更改现在正在上传到 iCloud 服务器。

  • NSURLUbiquitousItemPercentUploadedKey— 对于正在上传的项目,指示已将更改的百分比上传到服务器。

  • 尽管 iCloud 服务器会主动拉取您的应用在本地所做的更改,但 iOS 设备通常不会从服务器拉取更改,直到您尝试访问该文件。如果您尝试打开当前正在下载的文件,iOS 会阻止发出打开请求的线程,直到文件下载并可供使用。因此,如果您担心潜在的延迟,请根据需要检查文件的当前状态,并可能更新您的用户界面以反映该文件尚不可用或当前正在下载。

    有关可以为 URL 请求的属性的更多信息,请参阅NSURL 类参考

    于 2012-06-11T01:21:16.303 回答