使用Core Data,iCloud和CloudKit进行同步和备份以及它们如何协同工作


111

我正处于创建应用程序的早期阶段,我想在其中保存,同步和备份数据。该应用程序不会在数据库中仅存储数据的任何文件。它将是iOS 8及更高版本,因此我可以使用CloudKit。我做了一些研究,但仍不清楚Core Data,iCloud和CloudKit如何协同工作。

据了解,CloudKit只是从云中获取数据或从云中获取数据的一种方法。CloudKit只是与iCloud同步数据的另一种方式吗?

我的问题是:

  1. 如果确实使用CloudKit,是否还需要创建本地核心数据数据库?

    • 如果是,它将自动与iCloud同步,还是我必须调用方法存储到两个地方?
  2. 如果数据仅存储在云中,则当iOS设备未连接到互联网时,用户将能够访问它。我读到CloudKit只有有限的缓存。

  3. 如果未启用iCloud帐户,该如何工作。

如果有人可以分解每种技术在离线和在线保存和同步核心数据数据库的过程中的作用。

我目前的理解是:

  • 核心数据用于在本地存储数据

  • iCloud同步数据并存储在云中

  • CloudKit使您能够在云中存储和管理数据?

我希望我提供了足够的信息来解决这个问题。


2
甚至我都没有对此做过多的研究,但据我所知,它并不存储在本地。它类似于普通的服务器客户端服务。这就是为什么没有互联网就无法访问数据库的原因。并且根据文档,如果用户当时未启用icloud帐户,则您只能从公共容器中读取数据
Sachin 2014年

我们@Yan可以这样做,请建议,stackoverflow.com/questions/25600556/...
Nikunj

Answers:


183

就像这样:

  • 核心数据本身完全是本地的,不会自动与Apple的任何云服务一起使用。
  • 启用iCloud的核心数据打开同步。您保存在Core Data中的任何更改都会传播到云中,并且在云中所做的任何更改都将自动下载。数据既存储在iCloud中,又存储在本地永久性存储文件中,因此即使设备处于脱机状态也可以使用。您不必编写任何特定于云的代码,只需要添加侦听传入的更改(这很像在不同的受管对象上下文中进行的更改)。
  • CloudKit与核心数据无关。它不是同步系统,而是传输系统。这意味着,每当您想读取/写入云数据时,都需要进行显式的CloudKit API调用。什么也不会自动发生。CloudKit不在设备上存储数据,因此如果设备离线,则数据不可用。CloudKit还添加了一些iCloud核心数据不可用的功能-例如公共共享数据以及仅下载部分数据集而不是全部内容的功能。

如果您想将CloudKit与Core Data一起使用,则必须编写自己的自定义代码以在托管对象和CloudKit记录之间进行转换。这不是不可能,但是要编写更多的代码。它可能更可靠,但现在确定还为时过早。

我写 了一篇博客文章从过去使用Core Data和iCloud的人的角度描述了CloudKit。

更新,2016年6月:截至的最新文档NSPersistentStoreCoordinator,与iCloud的Core Data相关的所有内容均标记为不推荐使用。结果,应该避免在新开发中使用它。


1
过去,我在将Core Data与iCloud一起使用时遇到过损坏问题,但是自从iOS 7发布以来,我并没有使用太多。应该会更好。对于CloudKit来说,现在还为时过早,因为它尚未正式发布。
Tom Harrington

3
@Tom Harrington-您能在iOS 8的iCloud上试用Core Data并让我们知道您的印象吗?我在iOS 7中也经历了很多损坏,Apple支持人员确认了许多错误。我希望iOS 8的可靠性达到可接受的水平,但是希望您能收到专家的
反馈


3
“您不必编写任何特定于云的代码,只需要添加侦听传入的更改(这很像在不同的受管对象上下文中进行的更改)。” -您有关于此注释的代码示例/示例吗?我找不到可靠的例子:(
Ernest

1
@TomHarrington提供了这种反馈,如果我们需要做的就是为什么还要进行stackoverflow检查文档:(
Ernest

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.