我的应用程序使用 CoreData 和 iCloud 作为后端。多个设备可以访问 iCloud 数据库.public
。
本地 CoreData 存储使用NSPersistentCloudKitContainer
.
我根据Apple 的建议使用历史跟踪。
在那里,Apple 建议尽可能删减历史记录。他们说
因为持久性历史跟踪事务占用磁盘空间,所以确定一个清理策略以在不再需要它们时将其删除。在修剪历史之前,单一的看门人应该确保您的应用程序及其客户端已经消耗了他们需要的历史。
最初在 26:10 开始的WWDC 2017 演讲中也提出了这一建议。
我的问题是:我如何实现这个单一的看门人?
我假设这个想法是单个实例知道应用程序的每个用户上次同步他们的设备的时间。如果是这样,则可以修剪此日期之前的交易历史。
但是,如果用户同步了本地数据,然后长时间不再使用该应用程序怎么办?在这种情况下,在该用户再次同步本地数据之前,无法修剪历史记录。所以历史数据可以任意增长。在我看来,这是一个我不知道如何解决的核心问题。
上面引用的 Apple 文档建议:
与获取历史记录类似,您可以使用 deleteHistory(before:) 删除比令牌、交易或日期更早的历史记录。例如,您可以删除所有超过 7 天的交易。
但这并不能解决我心中的问题。
除了这个一般性问题,我的想法是在公共 iCloud 数据库中有一个 iCloud 记录类型,它直接为每个设备(即没有 CoreData)存储本地数据库更新的最后日期。由于所有设备都可以读取这些记录,因此很容易识别上次更新所有本地数据库的时间,并且我可以删除此日期之前的历史记录。
这是处理问题的正确方法吗?