Ios 如何将存储在核心数据中的用户生成的数据备份到服务器?

Ios 如何将存储在核心数据中的用户生成的数据备份到服务器?,ios,core-data,synchronization,Ios,Core Data,Synchronization,我的应用程序将从客户那里收集信息并将其备份到服务器。每次用户插入、更新或删除其信息时,应用程序都会尝试将最新数据备份到服务器。如果存在连接错误或其他问题,应用程序将在下一次机会中尝试备份所有未更新的数据 我的问题是,有什么好的解决方案来实现它吗?我目前的解决办法是: 托管对象有一个名为“已更新”的属性,默认值为:false 当用户插入数据时,应用程序读取行属性和objectID,并将它们作为JSON发送到服务器。如果服务器成功地将数据插入mysql,它将使用objectID进行响应。HTTP处理

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

我的问题是,有什么好的解决方案来实现它吗?我目前的解决办法是: 托管对象有一个名为“已更新”的属性,默认值为:false

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

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

  • 要处理删除,我需要另一个属性
    已被删除
    。当用户删除记录时,应用程序将通过将
    is\u deleted
    设置为true来隐藏记录。服务器删除记录后,应用程序最终删除记录

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

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


    你有更好的解决办法吗

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

    只是不要在服务器上使用ObjectID。它们对于某个特定设备上的数据库来说是唯一的。它们的主要目的是跨不同的托管对象上下文识别托管对象。相反,我们使用您自己的id,可能是服务器生成的权威id

    显而易见的“优雅”选择是使用苹果将iCloud与核心数据集成。然后,您必须在服务器端完全不做任何事情。缺点是您无法访问用户信息(这可能是需要的)。更重要的缺点(showsupper)是它不能可靠地工作(参见我的SOF问题)