我有一个使用Core Data的iOS 7应用程序。一些核心数据对象具有相关的(一对一关系)图像,这些图像是> 1MB& < 4MB并存储在应用程序的Document
文件夹中。 Core Data对象仅将图像名称存储为字符串。
我想为应用程序集成iCloud支持,以便我可以在设备之间同步数据。我打算使用iCloud Core Data存储来同步Core Data对象。但是如何处理图像?!阅读完不同的帖子后,我发现了几个突出显示的选项。我正在努力选择一个,这对我来说最合适。知道某人的经验/建议会很高兴。我应该小心,或者我没想到的是什么?我还需要考虑将现有数据迁移到我将选择的选项。
选项1 。将核心数据中的UIImage
存储为具有外部二进制数据的二进制数据选项(读取here)。此刻似乎是最简单的解决方案,但我认为不是最好的解决方案。来自Documentation:
但是,如果您能够将BLOB存储为资源,那就更好了 文件系统,并保持链接(如URL或路径) 资源。
还会同步外部文件吗?如果是这样,如果用户退出时同步的可靠性最小化应用程序,同步过程是否会恢复?来自objc.io关于外部文件参考:
在我们的测试中,当发生这种情况时,iCloud并不总是知道如何 解决关系并可以抛出异常。如果你打算用 iCloud同步,请考虑取消选中iCloud实体中的此框
选项2 。使用UIDocument
(好教程here)存储图像,并以某种方式跟踪核心数据条目与UIDocument
之间的关系。根据我的理解,我放在此目录中的任何内容都将由系统守护程序自动同步到iCloud。因此,如果用户退出应用程序,图像仍将同步到iCloud,对吧?
选项3 。使用FileManager
(更多信息here)。我没有读过很多关于这种方法的内容,但我认为它也可以起作用。
选项4 。任何其他?
有类似的帖子(例如Core Data with iCloud design),但不幸的是他们没有完全回答我的问题。
答案 0 :(得分:0)
我认为最好的解决方案是将图像存储在远程主机上,并将图像URL保存在CoreData中 此外,图像的本地路径应该可以从远程URL解析。
所以算法看起来像这样 - >
1)从CoreData获取远程URL
2)解析图像的局部路径
3)如果存在本地映像则检索它,否则从远程读取它并将其保存到本地存储。
您可以查看Amazon S3 server here。