Core Data 删除外部存储实体不会释放 iCloud 中的空间

Posted

技术标签:

【中文标题】Core Data 删除外部存储实体不会释放 iCloud 中的空间【英文标题】:Core Data deleting External Storage entity doesn't free up space in iCloud 【发布时间】:2013-03-26 04:52:50 【问题描述】:

在我的应用程序中,我在 Core Data sqlite 中有这个简单的笔记 > 照片关系,照片是带有“允许外部存储”的二进制数据,删除规则是笔记级联照片,照片无效笔记。当我尝试添加一些带有照片的笔记然后删除它们时,它在 iPhone Simulator 目录中看起来很好(外部照片文件被删除)。但是,当我在我的 iPhone 上尝试使用 iCloud 同步时,我的应用程序的 iCloud 存储大小只会在我添加照片时不断增加,但在我删除笔记或照片后从未减少 - 有什么想法吗?

【问题讨论】:

【参考方案1】:

您删除了照片,但交易日志仍然存在。 Core Data 的 iCloud 集成基于事务——任何时候你保存更改,都会创建一个新的事务日志。事务包括创建、更新或删除数据。事务日志一直存在,直到底层 iCloud 软件决定对其进行处理。

创建照片时,您会获得一个创建对象并包含照片数据的事务日志。当您删除照片时,您会得到一个交易日志,上面写着要删除该照片。 第二个日志不会抵消第一个,它会添加到它。现在您拥有两个事务日志,并且照片数据仍然存在。

在某些时候,底层 iCloud 代码会合并日志,此时照片应该会消失。但是,您无法做到这一点,您必须等到它在将来的某个日期发生。

【讨论】:

感谢 Tom - 我同时使用了 Apple 技术支持票并得到了非常相似的答案。所以这意味着我们对此无能为力吗?我看到我的应用程序在没有释放任何东西的情况下获得了高达 170MB 的 iCloud 存储空间。另外,我从不同的讨论中看到,将 Core Data 与 iCloud 一起使用通常是一个坏主意——有没有建议我应该采用哪种方法?非常感谢! 不幸的是,我不知道您可以做什么直接影响它。 Core Data 的 iCloud 集成经常以各种方式不稳定。您可能需要考虑其他选项,或者在未来的 ios 版本改进之前不包括同步。 感谢汤姆的详细说明! 嗨,Tom,有什么好的方法可以备份 iCloud CoreData 数据库以防损坏?我在这里创建了一个问题:***.com/questions/15694426/…

以上是关于Core Data 删除外部存储实体不会释放 iCloud 中的空间的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 不会从内存中释放 UIImage 数据 (ImageIO_PNG_Data)

从内存存储中删除 Core Data 对象会将它们变成故障,但不会擦除它们

SwiftUI Core Data 删除实体的相关数据

Core Data 不会触发实体属性的错误,但会触发关系

Core Data 自动迁移不会在我的新模型中创建新实体

由于继承缺陷,Core Data sqlite 存储单表?