【问题标题】:Save images in Core Data + iCloud - Swift在 Core Data + iCloud 中保存图像 - Swift
【发布时间】:2015-08-04 10:19:52
【问题描述】:

我的应用是一本心情日记,为了保存我选择使用 Core Data 的数据(用于字符串、图像等);为了让用户恢复他的日记,我实现了 iCloud,它与 Core Data 配合得很好。

如果我没有太多条目,一切都很好,但是当保存的图像太多时,应用程序加载数据很慢并遇到内存警告。

为了保存我的图像,我选择了可​​转换数据类型而不是二进制数据;我知道这不是保存图像的最佳方式(保存 url 肯定更好),但我需要在 iCloud 上同步我的数据,并将图像保存为 Transformable 允许我以简单的方式同步数据(感谢提供的可能性Apple Api 链接 Core Data 和 iCloud)。

如何避免此内存警告并在 iCloud 上同步我的应用图片?

我考虑过将我的照片保存在自定义相册中的可能性(如果为照片应用程序激活了 iCloud,我的应用程序照片将被同步),但我需要使用自定义名称保存它们以从相机胶卷中检索它们到我的应用程序,目前我没有找到任何解决方案来将具有自定义名称的图片保存在自定义相册中。

将照片保存在文档目录中(并将 url 保存在我的核心数据实体中)将是本地数据库的正确选择,但我的应用图片不会同步。

【问题讨论】:

    标签: ios image swift core-data icloud


    【解决方案1】:

    您可以尝试一些事情。

    首先,添加一个图像缩略图属性,用于存储图像的较小版本。尽可能使用它。加载一堆全尺寸照片需要大量内存,因此只要您的 UI 允许更小的尺寸,请改为加载较小的图像。

    除此之外,您还可以使用以下策略之一更改处理图像的方式。按复杂性(和有效性)升序排列:

    1. 确保为数据模型中的图像属性启用“允许外部存储”。这将让 Core Data 将图像放在持久存储之外,而无需您管理这些文件。例如,如果您有时获取数据但不使用图像属性,这将节省内存。

    2. 更改数据模型,以便将图像保存在不同的实体中,并通过关系将其链接到您当前的实体。这应该可以更轻松地避免在您不使用图像时“意外”加载图像。

    3. 将图像放在单独的文件中,并在 Core Data 中只保留文件名。您仍然可以通过 iCloud 同步图像,因为您可以在 Core Data 之外直接通过 iCloud 同步文件。但是您需要额外的代码来管理上传/下载图像。您还需要确保可以处理 Core Data 已完成同步但图像尚不可用的情况。

    在这个列表中,#1 是最简单的,但可能影响最小。使用 #3 应该非常有效,但需要做最多的工作。

    【讨论】:

    • 3.要在 Core Data 之外同步图像,我必须激活“iCloud Documents”吗?如果是,我可以使用自定义名称将图像保存在文档目录中,然后使用这些自定义名称检索它们吗?
    • 您将使用 iCloud 文档。要同步图像,您首先要保存在文档目录中,然后使用 NSFileManager 的方法 setUbiquitous(_, itemAtURL:, destinationURL:, error:) 方法将其移动到 iCloud。您必须使用其他方法(在 NSMetadataQueryNSFileManager 上)从 iCloud 查找和下载文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多