【问题标题】:Syncing files with iCloud [closed]与 iCloud 同步文件 [关闭]
【发布时间】:2013-07-15 05:59:17
【问题描述】:

我制作了一个应用程序,可以处理 MP4 波形等录制文件。

我想将我的应用与 iCloud 同步,但我不知道如何。

哪种方法更好:基于文档、键值对还是核心数据?

我还有以下问题:

  1. 我们可以删除文件吗?如果是这样,它会被扔进垃圾箱吗?
  2. 我们可以将文件移动到另一个文件夹吗?
  3. 我们如何知道文件更改?
  4. 是否有任何机制可以通知我们在应用关闭时发生的更改/创建/删除?

【问题讨论】:

标签: iphone ios ipad icloud


【解决方案1】:

咨询iCloud Design Guide 中的三种 iCloud 存储 部分,我们可以得到以下信息:

iCloud 支持三种存储方式。要为您的应用选择正确的一个(或组合),请确保您了解每个应用的意图和功能。三种 iCloud 存储是:

键值存储用于离散值,例如偏好、设置和简单的应用状态。

文档存储,用于存储用户可见的基于文件的信息,例如文字处理文档、绘图和复杂的应用程序状态。

核心数据存储,适用于鞋盒式应用程序和基于服务器的多设备数据库解决方案,适用于结构化内容。 iCloud Core Data 存储建立在文档存储之上,并使用相同的 iCloud API。

所以基本上,这取决于你想做什么。上面的段落是不言自明和明确的,但是如果您仍然无法决定,请阅读 Designing for Key-Value Data in iCloudDesigning for Documents in iCloudDesigning for Core Data in iCloud 以了解每个选项的功能和限制。


iCloud File Management 应该回答您的其他问题。

1 & 2

您可以使用普通的NSFileManager 方法管理位于 iCloud 文档存储中的文件,这意味着您可以像在本地存储中一样管理 movedeletecopy 文件。

与 OS X 不同,iOS 没有可将已删除文件移入的垃圾箱。如果你删除一个文件,它就消失了。如果你想要垃圾功能,你必须自己实现它。

3

This guide 描述了如何发现应用程序的 iCloud 文件夹中的文件。这里的关键代码行是

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(processFiles:)
    name:NSMetadataQueryDidUpdateNotification
    object:nil];

NSMetadataQueryDidUpdateNotification 发布元数据查询更新。如果您让它持续运行,则每次外部文件更改时都会发布它,因此您可以采取适当的措施。有关这方面的更多信息,请参阅NSMetadataQuery Class Reference

4

我不明白您为什么需要这样做,因为您可以在应用程序启动时获取当前在 iCloud 中的文件列表,并允许用户编辑它们。您不需要知道文件已更改的原因。但是,如果您出于某种原因确实需要这样做,您可以将NSMetadataQuery 返回的相关数据保存在本地,然后在应用程序启动时加载该文件并将您保存的列表与文件列表进行比较iCloud,并用它来找出在此期间发生了什么变化。


希望此答案中的文档链接数量表明您的所有问题都已得到解答。

【讨论】:

  • 哇,非常感谢!这是一个很大的帮助......
  • 如果这解决了您的问题,请随时点击答案旁边的勾:)
猜你喜欢
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多