0

我的应用程序将从客户那里收集信息并将其备份到服务器。每次用户插入、更新或删除他们的信息时,应用程序都会尝试将最新数据备份到服务器。如果出现连接错误或其他问题,该应用程序将在下次机会时尝试备份所有未更新的数据。

我的问题是有什么好的解决方案来完成它吗?我当前的解决方案是:托管对象有一个名为is_updated默认值的属性:false。

  1. 当用户插入数据时,应用程序读取行属性和 objectID 并将它们作为 JSON 发送到服务器。如果服务器成功将数据插入到 mysql 中,它会以 objectID 响应。HTTP 处理程序将is_updatedobjectID 行的 设置为 true。

  2. 更新的处理方式与插入类似。要查找要更新的记录,我必须在服务器表中添加一个 objectID 字段。

  3. 要处理删除,我需要另一个属性is_deleted。当用户删除记录时,应用程序将通过设置is_deleted为 true 来隐藏记录。服务器删除记录后,应用程序最终删除记录。

  4. 在这三个操作中,应用程序将检查是否有任何未更新的记录并一起处理。

但我觉得解决方案有点丑陋。处理混合在一起的多个插入、删除操作确实很复杂。也许我必须在一个操作队列中发送多个 HTTP 请求。如果用户重新安装应用程序,应用程序需要从服务器获取所有记录并存储在本地。但是他们的 objectIDs 不再起作用了。

你有更好的解决方案吗?

4

1 回答 1

0

你的解决方案还不错。HTTP请求的排队确实是一个标准的事情,所以这应该不是一个大问题。

只是不要您的服务器上使用 objectID。它们对于特定设备上的数据库来说确实是独一无二的。它们的主要目的是跨不同的托管对象上下文识别托管对象。取而代之的是我们您自己的 id,也许是由服务器生成的具有权威性的。

显而易见的“优雅”替代方案是使用 Apple 将 iCloud 与 Core Data 集成。然后你必须在服务器端什么都不做。缺点是您无法访问用户信息(这可能是需要的)。更显着的缺点(showstopper)是它不能可靠地工作(请参阅我的 SOF 问题here)。

于 2013-06-04T15:27:35.957 回答