Core Data iCloud 同步图像

Posted

技术标签:

【中文标题】Core Data iCloud 同步图像【英文标题】:Core Data iCloud sync images 【发布时间】:2015-01-23 23:13:55 【问题描述】:

我想在 Core Data 应用程序中通过 iCloud 进行同步。除了 Core Data 中的一些字符串属性外,我还想同步图像。我做了很多研究,似乎有两种方法可以实现这一目标。意见确实各不相同,所以我很困惑哪个是更好的解决方案?

方法 A:

将图像作为二进制数据存储在 Core Data 中。

优点:

在一个同步解决方案中,所有内容都与 Core Data 同步同步。

没有额外的代码,这对我来说是一大优势,因为我使用的 Ensembles Core Data Sync Framework 运行良好。

缺点:

人们说您不应该将较大的数据与 Core Data 同步。但是什么是“允许外部存储”呢? - 我读到检查该选项可能会在迁移核心数据模型时导致数据丢失。但我认为这就是它的目的?为了同步更大的数据......!?我应该检查还是不检查?对此众说纷纭……

方法 B:

将图像本地存储在文档目录中,并将其 url 存储在 Core Data 中。

优点:

避免方法 A 的缺点。

缺点:

两个同步解决方案需要并行工作。图像的核心数据同步和 UIDocument 同步。 - 这项工作真的会同步吗?会不会是 Core Data 已经同步,而 UIDocument 同步失败或速度较慢或其他原因?

更多代码。非常复杂,非常复杂。

【问题讨论】:

【参考方案1】:

看来你是在一块石头和一个坚硬的地方之间。您很好地研究了您的问题,并且您概述的选项是正确的(嗯,其中之一是)。

我可以向您保证的是,如果您选择选项 A,并且图像累积到任何显着数量(可能少至数百,取决于大小),性能会迅速下降。如果尺寸很大,即使从数据库加载单个图像也可能会导致明显的延迟。

UIDocument 解决方案是可行的。真的没那么复杂。用户希望文本立即同步,而图像可能需要一段时间,因此只要您保持 UI 响应,这在同步期间不是问题。实际上,您可以预期图像同步需要更长的时间 - 这是合乎逻辑的。将其与其他数据分开的另一个原因。

我希望这将帮助您做出更明智的决定。不要根据您目前的专业水平来选择您的解决方案。如果您可以处理 Core Data,那么设置 UIDocument 与它同步不会有问题 ;-)。

编辑 话虽如此,让我解释一下“允许外部存储”。这意味着 Core Data 可以决定是否要将此属性存储在外部文件中,而不是存储在数据库二进制文件中。因此,如果您决定使用选项 A,这可能会提高性能并防止数据库变得太大。我相信 iCloud 同步也应该按预期工作。

【讨论】:

感谢您的帮助!好吧,我的应用程序是一种笔记应用程序,我从 Flurry 分析中了解到,用户没有这么多条目/对象。我认为最高的数字是 100 左右。所以没有几百个对象,用户也不会一次输入大量条目。但从设计的角度来看,这不是最好的选择,对吧? UIDocument 同步的问题是我无法让它正常工作。我找到的所有教程都是这样的:将本地存储或存储在云中。如果用户启用/禁用 iCloud,他们会在本地和云存储之间切换,然后条目就消失了。我与 Ensembles Core Data 同步的其余对象避免了这个问题,所以使用并行似乎有问题和复杂? 我想要实现的目标:如果启用了 iCloud 并合并,则通过 iCloud 跨设备将文档目录中的图像同步到文档目录。如果关闭 iCloud,请保留当前的图像。 我看过合奏。对我来说看起来像是一个混乱的解决方案(即使它有效)。您是否考虑过使用原生 Core Data 代码? 我是初学者,有一些基础知识。我想实现的大多数事情都是通过谷歌搜索等来完成的。在大多数情况下,这对我有用,但是使用 iCloud...我花了几个小时,几天几周的时间... Ensembles 真的很棒,对我来说是个破坏者:它很简单...而且它完全符合我的要求想。只是同步......没有不同的商店(本地/云)和所有这些高级 iCloud 问题......它只是同步,如果你关闭 iCloud,一切都保持原样......这就是用户所期望的...... .

以上是关于Core Data iCloud 同步图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Core Data 与引用的文件同步?

iOS Core Data iCloud 同步 - 可选

使用 iCloud 在多台设备上同步 Core Data

在应用程序运行时启用/禁用 Core Data 的 iCloud 同步

Core-Data 和 iCloud 限制每个实体的项目数 - 潜在的同步问题

Core Data 与 Ensembles 的 iCloud 同步