gpt4 book ai didi

iphone - 核心数据同步 - 跟踪删除的对象

转载 作者:可可西里 更新时间:2023-11-01 03:52:55 26 4
gpt4 key购买 nike

我正在为我正在开发的 iPad 应用程序设置基本同步服务。目标是让数据在 iPad 应用程序的多个实例中保持一致,并在 Web 上拥有数据的只读版本,从而推出自定义解决方案。

目前的流程是这样的:

  • 每个实体都有一个“创建”、“修改”和“UUID”字段,这些字段由 Core Data 自动更新
  • 在同步时,创建或修改日期晚于上次同步日期的每个实体都被序列化为 JSON 并发送到服务器
  • 服务器使用客户端生成的 UUID 作为 PK 来保存对 MySQL 数据库的任何更改(如果存在冲突,它只是使用最近修改的实体作为“真实”版本,没有什么特别的)并发回任何更新实体给客户
  • 然后客户端将这些更改合并回其核心数据数据库

这一切似乎工作正常。我的问题是如何使用此方法跟踪已删除的对象?我猜我可以为每个实体添加一个“已删除”标志,并在客户端删除某些内容时设置它,然后我可以将该更改与其余同步数据一起推送到服务器。同步完成后,客户端实际上可以删除这些实体。我的问题是:

  • 我可以覆盖 Core Data 的删除方法来自动设置这个标志吗?
  • 这是否需要在服务器上无限期地保留所有已删除的实体?我们无法知道每个客户端何时同步并实际删除了每个实体(我目前没有跟踪客户端实例)
  • 有更好的方法吗?

最佳答案

你如何保留一个包含 UUID 和创建/更新/删除字段的增量历史表,也许每个更新都有一个修订号?因此,您保留了一份自上次成功同步以来发生的更改的小型检查列表。

这样,如果您删除一个对象,您可以在增量历史表中添加一个条目,其中包含已删除的 UUID 并将其标记为已删除。与创建和更新的对象一样,您只需要检查增量表以查看服务器需要删除、更新、创建等的哪些项目。您甚至可以将每个修订存储在服务器上以支持回滚到以前的版本 future ,如果你愿意的话。

我认为修订号比依赖可能手动更改的客户时钟要好。

您可以使用 NSManagedObjectContext 的 insertedObjects、updatedObjects、deletedObjects 方法在每次保存过程之前创建增量对象:)

我的 2 美分

关于iphone - 核心数据同步 - 跟踪删除的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com