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

Mat*_*der 4 core-data ios afnetworking afnetworking-2

我需要创建将存储所有请求的离线模块,然后当Internet连接可用时,模块将逐个请求服务器.

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

  1. 创建请求
  2. 检查互联网连接
  3. 等待回复
  4. 基于JSON响应创建对象(db中的记录)

但离线算法有一个小的不同:

  1. 创建请求
  2. 检查互联网连接
  3. 创建代理对象(在db中记录)
  4. 听取网络连接
  5. 与服务器同步临时数据.

在临时对象之后需要更新的唯一标识符和关系的主要内容将与后端上的对象同步.

我的问题是,已经有解决方案如何将脱机数据与服务器同步?

或者也许你有更好的算法,它也适合我)

Dan*_*lly 10

我建议以下流程:

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

在激活管理器之前,您可以在商店中查询待处理的请求,并取消/删除不再相关的请求.