我需要创建离线模块来存储我的所有请求,然后当 Internet 连接可用时,该模块将一个一个地向服务器发出请求。
现在我正在使用 Core Data 和 AFNetworking 2.0,但我在网上工作。所以接下来是在线算法:
- 创建请求
- 检查互联网连接
- 等待回复
- 根据 JSON 响应创建对象(记录在数据库中)
但是离线算法有一点不同:
- 创建请求
- 检查互联网连接
- 创建代理对象(记录在数据库中)
- 收听互联网连接
- 与服务器同步临时数据。
临时对象与后端对象同步后需要更新的主要唯一标识符和关系。
我的问题是已经有解决方案如何将离线数据与服务器同步?
或者也许你有更好的算法对我来说也可以)
最佳答案
我会建议以下流程:
- 实现一个“请求管理器”,其中有一个“私有(private)队列”上下文
- 当某个模块需要发出请求时,它使用管理器来执行
- 当需要请求时,管理器总是将其写入存储(使用其上下文),并带有创建日期的时间戳
- 经理还将监听在线/离线状态变化
- 当检测到在线状态时,托管查询存储中的未决请求并将它们一一发送到服务器
- 当需要新的请求时,管理器将按照(4.1)中的描述来防止请求饥饿
- 您可以使用一个标志来指示管理器当前是否正在运行(处理请求),以便插入的新请求不会立即触发从商店中获取数据
- 向服务器发出的请求可能有自己的上下文来写入存储,这样它们就不会干扰经理的工作
- 当检测到“离线”状态时,经理可以取消所有事件的请求(它们将在下次检测到在线状态时执行
- 如果请求完成(提交给服务器和本地存储),则将其从存储中删除
在激活管理器之前,您可以查询商店中的未决请求并取消/删除不再相关的请求。
关于ios - 当应用程序有互联网连接时,将离线核心数据与服务器同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326956/