iOS-如何创建离线操作队列并在上线时执行?

Posted

技术标签:

【中文标题】iOS-如何创建离线操作队列并在上线时执行?【英文标题】:iOS- How to create offline operation queue and execute when comes online? 【发布时间】:2016-04-09 07:37:37 【问题描述】:

我刚刚进入 ios。我有一个场景:如果用户的设备处于脱机状态,则将他的请求(Web 服务)与他的所有请求详细信息参数一起添加到队列中,并且每当他的设备上线时,然后一个接一个地点击 Web 服务(带有已存储的数据) /同时直到队列为空。我必须使用核心数据。我对此一无所知。因此,如果有人分享示例项目的链接(github/其他任何站点),我将不胜感激。 提前致谢。

【问题讨论】:

你试过了吗?什么地方出了错?显示您的代码 @Wain,我不知道,我刚刚进入iOS 【参考方案1】:

离线时将数据存储在临时数据库中,在线时检查临时数据库是否有数据,然后使用适当的递归或for循环将数据一一发送到服务器。成功提交(在调用服务方法的完成处理程序中)如果使用递归,则从临时数据库中删除该数据并再次从中调用函数。

【讨论】:

【参考方案2】:

当连接不稳定时,我们在内部项目中遇到了类似的问题,因此我们编写了这个框架来包装任何网络请求,并允许无论连接如何都可以将其排入队列 - https://cocoapods.org/pods/OfflineRequestManager。任何做类似事情的人都可能会发现它很有用,或者至少从中汲取灵感。您仍然需要自己管理网络请求,但它提供了一个相当简单的界面,以确保应用程序不断尝试执行它直到它成功,包括保存到磁盘以便可以在启动时重新尝试。

最简单的用例如下所示,但大多数实际用例(保存到磁盘、特定请求数据等)将有更多的障碍需要跳过:

import OfflineRequestManager

class SimpleRequest: OfflineRequest 
    func perform(completion: @escaping (Error?) -> Void) 
        doMyNetworkRequest(withCompletion:  response, error in
            handleResponse(response)
            completion(error)
        )
    

///////
OfflineRequestManager.defaultManager(queueRequest: SimpleRequest())

【讨论】:

以上是关于iOS-如何创建离线操作队列并在上线时执行?的主要内容,如果未能解决你的问题,请参考以下文章

识别 iCloud coreData 更新:良好实践

如何创建 Flutter 应用的离线和在线

线程池任务

线程池和任务

如何使用离线数据 + 同步创建原生 ios 应用

如何创建离线 React iOS 应用程序?