UIDocument VS CoreData外部二进制数据VS文件管理器

时间:2014-11-03 16:05:53

标签: objective-c core-data icloud uidocument

我有一个使用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),但不幸的是他们没有完全回答我的问题。

1 个答案:

答案 0 :(得分:0)

似乎Apple会因大型数据库iCloud同步而拒绝应用程序。

我认为最好的解决方案是将图像存储在远程主机上,并将图像URL保存在CoreData中 此外,图像的本地路径应该可以从远程URL解析。

所以算法看起来像这样 - >
1)从CoreData获取远程URL 2)解析图像的局部路径 3)如果存在本地映像则检索它,否则从远程读取它并将其保存到本地存储。

您可以查看Amazon S3 server here