我制作了一个应用程序,可以处理 MP4 波形等录制文件。
我想将我的应用程序与 iCloud 同步,但我不知道如何。
哪种方法更好:基于文档、键值对还是核心数据?
而且我还有以下问题:
- 我们可以删除文件吗?如果是这样,它会被扔进垃圾箱吗?
- 我们可以将文件移动到另一个文件夹吗?
- 我们如何知道文件更改?
- 是否有任何机制通知我们在应用程序关闭时发生的更改/创建/删除?
查阅iCloud 设计指南中的三种 iCloud 存储部分,我们可以得到以下信息:
iCloud 支持三种存储方式。要为您的应用选择正确的一个(或组合),请确保您了解每个应用的意图和功能。三种 iCloud 存储是:
离散值的键值存储,例如首选项、设置和简单的应用程序状态。
用于用户可见的基于文件的信息的文档存储,例如文字处理文档、绘图和复杂的应用程序状态。
鞋盒式应用程序的核心数据存储和结构化内容的基于服务器的多设备数据库解决方案。iCloud Core Data 存储建立在文档存储之上,并使用相同的 iCloud API。
所以基本上,这取决于你想做什么。上面的段落是非常不言自明和明确的,但是如果您仍然无法决定,请阅读iCloud 中的键值数据设计、iCloud中的文档设计和iCloud中的核心数据设计,以了解每个选项。
iCloud 文件管理应该可以回答您的其他问题。
您可以使用常规方法管理位于 iCloud 文档存储中的文件NSFileManager
,这意味着您可以像在本地存储中一样移动、删除和复制文件。
与 OS X 不同,iOS没有将已删除文件移入的垃圾箱。如果你删除一个文件,它就消失了。如果你想要垃圾功能,你必须自己实现它。
本指南介绍了如何发现应用程序的 iCloud 文件夹中的文件。这里的关键代码行是
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(processFiles:)
name:NSMetadataQueryDidUpdateNotification
object:nil];
已NSMetadataQueryDidUpdateNotification
发布元数据查询更新。如果您让它持续运行,则每次外部文件更改时都会发布它,因此您可以采取适当的措施。有关这方面的更多信息,请参阅NSMetadataQuery
类参考。
我不明白您为什么需要这样做,因为您可以在应用程序启动时获取当前在 iCloud 中的文件列表,并允许用户编辑它们。您不需要知道文件已更改的原因。但是,如果您出于某种原因确实需要这样做,您可能会保存NSMetadataQuery
本地返回的相关数据,然后在应用启动时加载该文件并将您保存的列表与 iCloud 中的文件列表进行比较,然后用它来找出在此期间发生了什么变化。
希望此答案中的文档链接数量表明您的所有问题都已得到解答。