我想通过iCloud在Core Data应用中进行同步。除了Core Data中的一些字符串属性,我还想同步图像。我做了很多研究,似乎有两种方法可以实现这一目标。意见确实有所不同,所以我很困惑哪一个是更好的解决方案?
方法A:
将图像作为二进制数据存储在Core Data中。
优点:
在一个同步解决方案中,所有内容都与Core Data同步同步。
没有额外的代码,这对我来说是一个很大的优势,因为我使用的Ensembles核心数据同步框架非常好用。
缺点:
方法B:
将图像本地存储在文档目录中,并将其存储在Core Data中。
优点:
缺点:
需要两个同步解决方案并行工作。图像的核心数据同步和UIDocument同步。 - 这项工作真的会同步吗?可能是在UIDocument同步失败或速度较慢或其他情况下已同步Core Data?
更多代码。非常复杂,非常复杂。
答案 0 :(得分:1)
看起来你介于一块岩石和一块坚硬的地方之间。你很好地研究了你的问题,你勾勒出的选项是正确的(好吧,其中之一就是)。
我可以保证,如果您选择A并且图像累积到任何有效数字(可能只有几百个,具体取决于大小),性能会迅速恶化。即使从数据库加载单个图像,如果尺寸很大,也可能导致明显的滞后。
UIDocument解决方案是可行的。它真的不那么复杂。用户希望文本立即同步,图像可能需要一段时间,因此只要您保持UI响应,这在同步期间不是问题。实际上,你可以期待同步花费更长时间的图像 - 这是合乎逻辑的。将此与其他数据分开的另一个原因。
我希望这可以帮助您做出更明智的决定。不要根据您目前的专业水平选择您的解决方案。如果您可以处理Core Data,那么设置UIDocument与它同步就没有问题; - )。
修改强>
话虽如此,让我解释一下“允许外部存储”。这意味着Core Data可以决定是否要将此属性存储在外部文件中而不是数据库二进制文件中。因此,如果您决定使用选项A,这可能会提高性能并防止数据库变得太大。我相信iCloud同步也应该按预期工作。