当应用程序具有Internet连接时,将脱机核心数据与服务器同步

时间:2014-03-11 13:21:01

标签: ios core-data afnetworking afnetworking-2

我需要创建将存储所有请求的离线模块,然后当互联网连接可用时,模块将逐个向服务器发出请求。

目前我正在使用Core Data和AFNetworking 2.0,但我在线工作。所以在线算法是下一个:

  1. 创建请求
  2. 检查互联网连接
  3. 等待回复
  4. 基于JSON响应创建对象(db中的记录)
  5. 但离线算法有一个小的不同:

    1. 创建请求
    2. 检查互联网连接
    3. 创建代理对象(以db记录)
    4. 收听互联网连接
    5. 与服务器同步临时数据。
    6. 在临时对象之后需要更新的唯一标识符和关系的主要内容将与后端上的对象同步。

      我的问题是,如何将脱机数据与服务器同步?

      或许你有更好的算法,对我来说也没关系)

1 个答案:

答案 0 :(得分:9)

我建议以下流程:

  1. 实施"请求管理员"有一个"私人队列"里面的上下文
  2. 当某个模块需要发出请求时,它会使用管理器
  3. 当需要请求时,经理始终将其写入商店(使用其上下文)并创建日期的时间戳
  4. 经理还将收听在线/离线状态更改
    1. 当检测到在线状态时,托管查询待处理请求的商店并逐个向服务器发出
    2. 当需要新请求时,管理员将按照(4.1)中的描述行事,以防止请求饥饿
    3. 您可以使用一个标志来指示管理器当前是否正在运行(处理请求),以便插入的新请求不会直接触发从商店获取
    4. 发给服务器的请求可能有自己的上下文写入商店,这样他们就不会干涉经理工作
    5. 当"离线"检测到状态,管理员可以取消所有活动请求(它们将在下次检测到在线状态时执行)
    6. 当请求完成(提交到服务器和本地存储)时,它将从商店中删除
  5. 在激活经理之前,您可以向商店查询待处理的请求,并取消/删除不再相关的请求。