ios - 核心数据与服务器数据同步

标签 ios database core-data

首先,在这个问题上,我没有对任何数据库提出任何投诉,这只是我不知道并且需要改进自己的事情。

我开发了一个包含 coredata 的应用程序,它有将近 5 到 6 个表,例如工作、员工等。好的,现在关于 coredata 的几点。

  • Coredata 自动管理主键管理,我们不需要在每个表中创建主键
  • Myserver 包含主键,例如job_id , emp_id 自动递增 现在在我的应用程序中,我必须将我的数据与服务器同步,当我在我的表中添加任何条目时,相应的字段 job 或 emp id 将按预期为零,我无法在这些字段中创建我自己的值。

所以现在每 30 分钟我必须创建一个包含表数组的 JSON,它应该获取用户在这 30 分钟内执行的最新数据库记录,例如添加更新删除,所以我需要一种可以同步的机制与我的服务器和服务器的数据也确定该行需要添加或更新或删除。

我已经尝试了以下几种可能性,但我仍然没有获得完美的成功

  1. 我创建了 3 个字段 createdtimestamp、updatedtimestamp 和 deletedtimestamp 所以当用户第一次添加一个条目时 createdtimestamp of device time 因为应用程序可以离线运行。
  2. 所以在相应的操作中,如果用户更新,我会更新其他时间戳 任何记录或删除任何记录。但为了得到更新 服务器我们必须获取带有服务器时间戳的最新条目 但在这种情况下,如果 iser 时间戳与服务器不匹配,则 这个案子失败了。

所以我需要这个社区的建议。 谢谢。

最佳答案

您的服务器可能需要一个 CRUD(创建、读取、更新、删除)类型的 API。请求应在离线时排队并重复发送,直到收到有效响应,服务器应优雅地处理重复请求。

要处理添加,您可以使用一些参数调用“createJob”之类的方法,并从服务器接收一个 id,然后您可以使用该 id 填充 job_id 字段。

要处理服务器端所做的更改,您基本上需要一个存储在本地的“最后更新”时间戳,您将与服务器同步并提供您之前收到(和存储)的最新时间戳或零(从未收到过) ).然后,服务器将返回此时间点之后更改的所有内容以及应用程序下次需要发送的新时间戳(上次更改)。响应应包含足够的信息以更新当前状态并解决任何冲突。

为了解决删除状态,您的记录可以有一个“隐藏”标志来指示它是否已被删除(这称为“软删除”),这有助于参照完整性,但如果您确定可以在不破坏任何关系的情况下清除记录,您可以在收到来自服务器的有效“deleteJob”响应后执行此操作。

如果不设计您的解决方案,我无法提供更多帮助。但是,有各种工具可以帮助经验不足的开发人员处理此过程,例如 RESTKit。在服务器端,您可以查看 Node.js 或 ruby​​ on rails 或任何其他可以为您处理 REST 的东西。

您可以使用不同的 HTTP 方法来实现这一点,而无需多个端点,如 RFC2616 中所定义。 .

关于ios - 核心数据与服务器数据同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687352/

相关文章:

objective-c - 核心数据 undoManager 崩溃

ios - 如何调试应用程序 :openURL:sourceApplication:annotation?

objective-c - 在iOS上,在UIView的实例方法中,如果我们执行[self removeFromSuperview],为什么self仍然存在?

c# - 我是否需要某种加密类型来连接到 Xamarin 中的外部数据库

swift - 在 UI 测试中将模拟数据插入核心数据

ios - 核心数据中最后一行 id 始终返回零

ios - 避免用户意外打开 Xcodeproj 而不是 Xcworkspace

iphone - Core Plot 中的 Scatter Plot 到底是什么?

javascript - 左加入 lowdb

java - 使用 Java 连接到数据库