ios - 当应用程序有互联网连接时,将离线核心数据与服务器同步

标签 ios core-data afnetworking afnetworking-2

我需要创建离线模块来存储我的所有请求,然后当 Internet 连接可用时,该模块将一个一个地向服务器发出请求。

现在我正在使用 Core Data 和 AFNetworking 2.0,但我在网上工作。所以接下来是在线算法:

  1. 创建请求
  2. 检查互联网连接
  3. 等待回复
  4. 根据 JSON 响应创建对象(记录在数据库中)

但是离线算法有一点不同:

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

临时对象与后端对象同步后需要更新的主要唯一标识符和关系。

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

或者也许你有更好的算法对我来说也可以)

最佳答案

我会建议以下流程:

  1. 实现一个“请求管理器”,其中有一个“私有(private)队列”上下文
  2. 当某个模块需要发出请求时,它使用管理器来执行
  3. 当需要请求时,管理器总是将其写入存储(使用其上下文),并带有创建日期的时间戳
  4. 经理还将监听在线/离线状态变化
    1. 当检测到在线状态时,托管查询存储中的未决请求并将它们一一发送到服务器
    2. 当需要新的请求时,管理器将按照(4.1)中的描述来防止请求饥饿
    3. 您可以使用一个标志来指示管理器当前是否正在运行(处理请求),以便插入的新请求不会立即触发从商店中获取数据
    4. 向服务器发出的请求可能有自己的上下文来写入存储,这样它们就不会干扰经理的工作
    5. 当检测到“离线”状态时,经理可以取消所有事件的请求(它们将在下次检测到在线状态时执行
    6. 如果请求完成(提交给服务器和本地存储),则将其从存储中删除

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

关于ios - 当应用程序有互联网连接时,将离线核心数据与服务器同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326956/

相关文章:

iphone - 核心数据对象到一个 NSDictionary 可能有 nil 对象

ios - 使用 NSFetchedResultsController 搜索每个字符 CoreData 的速度非常慢,有大量记录

ios - 将现有对象模型转换为 Core Data 托管对象模型

ios - 将所有失败的传输排队

iphone - Objective-C中的JSON解析

ios - Parse中拉取PFUser.currentUser的指针域数据

ios - 如何使用 Evernote Cloud SDK for iOS 将 EDAMTimestamp 转换为 NSDate

ios - 为什么在我的 View 被推送到导航堆栈之前我的 UIAlertView 没有在屏幕上消失?

iOS - 将字典作为参数从 AFNetworking GET 传递的问题

ios - AFNetworking XMLResponse 主体是 HTML 编码的,无法解析