Core data UIManagedDocument&x2B;“iCloud”;大局观;?

Core data UIManagedDocument&x2B;“iCloud”;大局观;?,core-data,icloud,uimanageddocument,Core Data,Icloud,Uimanageddocument,我正在开发我的第一个“iCloud应用程序”。我浏览了苹果文档和斯坦福大学的视频,但我仍在努力理解iCloud的“大局” 我的目标是创建一个“”应用程序(这是一个苹果术语,指“具有单个持久存储协调器和单个持久存储的单个核心数据堆栈”的应用程序),如 在斯坦福大学的视频之后,我使用UIMangedDocument设置所有核心数据并启用iCloud功能。UIMangedDocument包含数据库并“存储在云中” 这已经是我要面对的第一件事:什么是“存储在云中”呢? 在我开始使用iCloud之前,我认

我正在开发我的第一个“iCloud应用程序”。我浏览了苹果文档和斯坦福大学的视频,但我仍在努力理解iCloud的“大局”

我的目标是创建一个“”应用程序(这是一个苹果术语,指“具有单个持久存储协调器和单个持久存储的单个核心数据堆栈”的应用程序),如

在斯坦福大学的视频之后,我使用UIMangedDocument设置所有核心数据并启用iCloud功能。UIMangedDocument包含数据库并“存储在云中”

这已经是我要面对的第一件事:什么是“存储在云中”呢?

在我开始使用iCloud之前,我认为“在云中存储文档”意味着“在云中存储文档副本”。我想在常规沙盒中会有我的文档的本地版本,在云中会有文档的副本。当本地文档发生更改时,这些更改也会传输到云版本。正如我现在所理解的,这是不正确的(至少不是完全正确的)。我说得对吗

要使用iCloud,我必须做的第一件事是调用URLForUbiquityContainerIdentifier:。这将返回“iCloudURL”,即云中文件夹的URL。所有存储在此URL下的文件都将“存储在云中”,对吗

我的第一个假设(云中的本地文件+副本)并不是完全错误的。事实上,存储在云中的任何文件都有“本地版本”和“云版本”。这是因为我可以访问iCloud URL并在此位置存储文件,即使设备当前没有Internet连接。但这仅仅是iCloud框架的神奇之处,我不必担心。在我看来,云是一个简单的特殊文件夹,该文件夹中的任何文件或目录都存储在云中。如果在设备设置中停用iCloud,iCloud URL将仅为零是这样吗?

第二件让我头疼的事情是iCloud如何将更改同步到文档中。假设设备A上的“TheApp”创建UIManagedDocument并存储在云中。在设备A离线之后。同时,设备B上的应用程序可以访问文档,并添加一些数据(例如,插入一些新员工或部门)。当设备B再次联机时,它将收到NSPersistentStoredImportubiquitousContentChangesNotification,并可以在文档的managedObjectContext上合并所有调用mergeChangesFromContextDidSaveNotification:,以复制这些更改

我无法确定是否真的需要合并这些更改。如上所述,从我的观点来看,只有一份文件。如果这是真的,我会收到关于更改的通知,这很好,但不必将这些更改复制到文档的“本地版本”,因为没有“本地版本”这样的东西这就引出了一个问题:从ContextDidSaveNotification进行合并更改有什么好处。

另一种情况与以前相同(在设备A上创建文档,在设备B上更改…),但现在设备A不仅脱机,而且在设备B上进行更改时,应用程序完全关闭。在这种情况下,设备A上的应用程序必须在再次启动文档后重新创建/重新打开文档。在这种情况下应该发生什么

我确实做了一些测试,但结果并不总是一样的。在某些情况下,文档以其“旧”版本开始,然后收到带有更改的通知。在其他情况下,文档直接在其新版本中启动,所有更改都已准备就绪。对于我的应用程序,第一种情况(从旧版本开始,接收更新通知)会更好,但我无法强制执行其中一种行为。这就是它应该工作的地方吗


多谢各位

一般来说,我可以建议阅读,尤其是本节

关于你的问题:

  • 什么是“存储在云中”?

    如果您在斯坦福视频之后使用UIManagedDocument,则在添加/编辑/删除数据时,您的应用程序将上载更改日志。但是,您的设备有一种“iCloud缓存”,它存储iCloud数据并从中进行访问(当您脱机时,甚至当您的应用程序被删除并重新安装时,您可以访问该文件夹)。如果您
    NSLog
    查看iCloud文件夹中文档的URL(您应该使用
    NSMetadataQuery
    执行此操作),您可以在设备上本地获取iCloud文件的路径,即

    /private/var/mobile/Library/mobile Documents///…

    因此,在第一次启动应用程序或每次启动应用程序时,在访问iCloud上的UI(托管)文档时,您需要考虑一系列问题(例如,iCloud是否可用,您是否有网络连接等)

    但是,按照视频的方式,您的应用程序沙盒和iCloud中不会有单独的文档(当然,您可以在将文档保存到iCloud URL以及应用程序沙盒中的本地URL时实现这一点)

  • 合并更改的需要

    如上所述,您的设备正在保存更改日志,其中包括对文档的添加/编辑/删除。这些更改日志将上载到iCloud,并由连接到同一iCloud帐户的其他设备下载。每个设备都可以使用更改日志重建数据模型的当前状态。这使iCloud非常高效(每次完整上传都需要更长的时间)。关于这些更改的同步过程,我还可以参考《iCloud设计指南》。简言之,您必须考虑您的设备同步本地iCloud