使来自Core Data中API的本地缓存数据无效

Posted

技术标签:

【中文标题】使来自Core Data中API的本地缓存数据无效【英文标题】:Invalidating locally cached data from an API in Core Data 【发布时间】:2013-06-15 11:19:15 【问题描述】:

在我正在构建的应用程序中,我使用 Core Data 缓存来自 API 的远程内容以供离线查看。这一切都很好,除了一个大问题:如果服务器上的记录被删除,我无法检测到并删除其缓存的对应项。

我唯一能想到的就是当我从 API 中提取数据并且仅将 API 返回的记录再次标记为有效时,以某种方式将所有当前数据标记为“无效”,但这似乎是一个笨拙的解决方案到问题。此外,由于我使用的 API 中的数据是分页的,因此它不能很好地适应大量记录。

所以我想知道的是:有没有更好的方法来使本地缓存数据无效以响应在服务器端删除它?

【问题讨论】:

【参考方案1】:

我建议,虽然不是最简单的方法,但让服务器端缓存已删除的项目并公开一个您可以调用以获取已删除项目的端点。在一个完美的世界吧。

您可以做的是在后台线程中,从服务器下载所有数据并将其与您本地的数据进行比较。因此,与其只是将其全部无效并重新解析(这对于大型数据集可能需要时间),不如运行并将服务器上的对象的 id 与 CoreData 中的对象进行比较。如果它在那里很好,如果不是从你的本地数据库中删除它。希望这可以帮助。

【讨论】:

这肯定是理想的解决方案。不幸的是,在这种情况下,我正在使用第三方 API,因此我无法控制实现。 所以只做第二部分:)

以上是关于使来自Core Data中API的本地缓存数据无效的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Twitter ID 存储在 Core Data 对象中

使用 .NET Core 将来自第三方 API 的数据集成到本地数据库

使用 Jest 时使节点缓存无效

显示带有来自 Core Data 的布尔值的 .sheet

如何使用 Retrofit 和 OKHttp 在下一次请求时使缓存路由无效/强制更新?

如何使控制器中的缓存数据 [OutputCache] 无效?