[英]iCloud with Core Data and File sync
我正在开发一个将核心数据与iCloud一起使用的应用程序(iOS7给出了很大的改进)。 此应用程序存储数据以使用此信息描述任务:
name
一个NSString
date
NSDate
image
一NSString
其描述将图片的路径 顺便说一句,图片可以存储在文档或图书馆目录中(我必须决定哪个是更方便的文件夹)在具有唯一名称的同一文件夹中。
现在我想为图像激活iCloud同步,否则用户的体验将不完整(我只是同步数据库数据..没有图像,应用程序的奇怪/错误行为)。
我对Apple文档感到困惑。 我无法找到一种方法来准确理解iCloud数据如何满足这种需求。 我只想在创建文件夹时立即同步它们的每个文件。 所以我的问题是:
注意:我知道我可以通过在文档文件夹中添加文件来同步数据,并希望用户激活文档同步...但这显然不是我想要的。
在同一个应用程序中同时使用Core Data事务日志同步和基于文件的同步来实现您想要实现的目标非常简单。
因此,您需要设置Core Data堆栈以使用iCloud选项并通过iCloud同步数据更改。 同时,您可以将图像存储在Apps iCloud容器中,以便它们同步。 请记住,您需要对Core Data fileURL中的图像使用相对引用,因为完整路径名将根据运行应用程序的设备而有所不同。 因此,例如,您只需将图像文件名存储在Core Data中,并使用标准目录(如“iCloudContainer / Documents / Images /”)来存储它们。 'iCloudContainer'是您通过调用[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:]
API获得的URL。
我上传了使用iCloud进行事务日志同步(即同步Core Data中的数据)的示例Core Data应用程序,以及使用文件同步在iCloud中存储Core Data备份文件,然后可以由任何设备访问。 您应该能够使用相同的代码将iRoud的备份文件移动到iCloud或从iCloud移动备份文件。 请记住,您必须先触发从iCloud下载文件,然后才能通过协调读取或使用NSFileManager初始化下载来使用它们。
下载并运行示例应用程序,并使用内置的备份文件管理器制作备份文件,并使用不同的设备将它们复制到iCloud和从iCloud复制。 然后在存储图像文件时使用相同的代码。
您的应用程序必须处理用户更改iCloud帐户,登录或退出iCloud等内容,并相应地移动核心数据文件和图像文件。
自动发生这种情况的唯一方法是在模型中为图像创建二进制数据属性。 如果这样做,您可能需要检查外部二进制存储允许选项,因此照片最终存储为文件而不是数据库。
如果您希望将照片存储在商店外部,则必须完成更多工作。 例如,您需要使用NSFileManager方法自己将照片迁移到iCloud容器中。 如果您觉得更容易,也可以使用像iCloud Access这样的类。
自己处理照片的缺点是,当核心数据存储同步时,你永远无法确定它们是否已全部到达你的设备,因此它可能会丢失一张或多张照片,即使它们在商店中有条目。 您必须确保您的应用可以处理此方案,可能会显示占位符图像,直到可以访问真实照片。
在一个应用程序中使用Core Data和Document同步没有问题。 事实上,它们在封面下完全相同。 从iClouds的角度来看,它们都只是要传输的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.