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)