Core data UIManagedDocument&x2B;“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上的应用程序必须在再次启动文档后重新创建/重新打开文档。在这种情况下应该发生什么 我确实做了一些测试,但结果并不总是一样的。在某些情况下,文档以其“旧”版本开始,然后收到带有更改的通知。在其他情况下,文档直接在其新版本中启动,所有更改都已准备就绪。对于我的应用程序,第一种情况(从旧版本开始,接收更新通知)会更好,但我无法强制执行其中一种行为。这就是它应该工作的地方吗Core data UIManagedDocument&x2B;“iCloud”;大局观;?,core-data,icloud,uimanageddocument,Core Data,Icloud,Uimanageddocument,我正在开发我的第一个“iCloud应用程序”。我浏览了苹果文档和斯坦福大学的视频,但我仍在努力理解iCloud的“大局” 我的目标是创建一个“”应用程序(这是一个苹果术语,指“具有单个持久存储协调器和单个持久存储的单个核心数据堆栈”的应用程序),如 在斯坦福大学的视频之后,我使用UIMangedDocument设置所有核心数据并启用iCloud功能。UIMangedDocument包含数据库并“存储在云中” 这已经是我要面对的第一件事:什么是“存储在云中”呢? 在我开始使用iCloud之前,我认
多谢各位 一般来说,我可以建议阅读,尤其是本节 关于你的问题:
- 什么是“存储在云中”?
如果您在斯坦福视频之后使用UIManagedDocument,则在添加/编辑/删除数据时,您的应用程序将上载更改日志。但是,您的设备有一种“iCloud缓存”,它存储iCloud数据并从中进行访问(当您脱机时,甚至当您的应用程序被删除并重新安装时,您可以访问该文件夹)。如果您
查看iCloud文件夹中文档的URL(您应该使用NSLog
执行此操作),您可以在设备上本地获取iCloud文件的路径,即NSMetadataQuery
因此,在第一次启动应用程序或每次启动应用程序时,在访问iCloud上的UI(托管)文档时,您需要考虑一系列问题(例如,iCloud是否可用,您是否有网络连接等) 但是,按照视频的方式,您的应用程序沙盒和iCloud中不会有单独的文档(当然,您可以在将文档保存到iCloud URL以及应用程序沙盒中的本地URL时实现这一点)/private/var/mobile/Library/mobile Documents///…
- 合并更改的需要 如上所述,您的设备正在保存更改日志,其中包括对文档的添加/编辑/删除。这些更改日志将上载到iCloud,并由连接到同一iCloud帐户的其他设备下载。每个设备都可以使用更改日志重建数据模型的当前状态。这使iCloud非常高效(每次完整上传都需要更长的时间)。关于这些更改的同步过程,我还可以参考《iCloud设计指南》。简言之,您必须考虑您的设备同步本地iCloud