我的应用程序是一本心情日记,为了保存我选择使用 Core Data 的数据(用于字符串、图像等);允许用户恢复他的日记我已经实现了 iCloud,它与 Core Data 配合得很好。
如果我没有太多条目,一切都很好,但是当保存的图像太多时,应用程序加载数据很慢并且遇到内存警告。
为了保存我的图像,我选择了可转换数据类型而不是二进制数据;我知道这不是保存图像的最佳方式(保存 url 肯定更好),但我需要在 iCloud 上同步我的数据,并将图像保存为 Transformable 允许我以简单的方式同步数据(感谢提供的可能性用于链接核心数据和 iCloud 的 Apple Api)。
我该怎么做才能避免此内存警告并在 iCloud 上同步我的应用程序图片?
我考虑过将我的照片保存在自定义相册中的可能性(如果 iCloud 为照片应用程序激活,我的应用程序图片将被同步),但我需要使用自定义名称保存它们以便从相机胶卷中检索它们到我的应用程序,目前我没有找到任何解决方案来在自定义相册中保存带有自定义名称的图片。
将照片保存在文档目录中(并将 url 保存在我的核心数据实体中)将是本地数据库的正确选择,但我的应用程序图片不会同步。
最佳答案
您可以尝试一些事情。
首先,添加一个图像缩略图属性,用于存储图像的较小版本。尽可能使用它。加载一堆全尺寸照片需要大量内存,因此只要您的 UI 允许较小的尺寸,就改为加载较小的图像。
除此之外,您还可以使用以下策略之一更改处理图像的方式。按复杂性(和有效性)的升序排列:
确保为数据模型中的图像属性启用“允许外部存储”。这将使 Core Data 将图像放在持久存储之外,而无需您管理这些文件。例如,如果您有时获取数据但未使用图像属性,这将节省内存。
更改数据模型,使图像保存在不同的实体中,并通过关系将其链接到您当前的实体。这应该可以更轻松地避免在不使用图像时“意外”加载图像。
将图像放在单独的文件中,并在 Core Data 中只保留文件名。您仍然可以通过 iCloud 同步图像,因为您可以在 Core Data 之外通过 iCloud 直接同步文件。但是您需要额外的代码来管理上传/下载图像。您还需要确保能够处理 Core Data 已完成同步但图像尚不可用的情况。
在此列表中,#1 最简单,但可能效果最小。使用 #3 应该非常有效,但需要最多的工作。
关于ios - 在 Core Data + iCloud 中保存图像 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806660/