类似于Path的Android优先级作业队列的iOS作业队列

5

有没有类似于Path's Android Priority Job Queue的iOS作业队列可以与社区分享?我对iOS非常陌生,所以我不确定平台本身是否提供了这样的解决方案。在安卓上不存在这样的事情,因此我不得不使用Path慷慨提供的库。如果iOS本身或Xcode有这样的解决方案/API,请指引一下我。如果没有,请分享你的解决方案,谢谢。

基本上,我正在寻找一个作业队列,它可以允许用户在没有网络的情况下向服务器发送数据:这意味着即使用户关闭iPhone,队列也会保留数据。然后,在稍后的某个时间,当系统检测到网络时,将数据推送到服务器。

SO上已经有一个类似的问题,因此我包含它以获取更多细节:如何在android上排队等待服务器派遣数据。不同之处在于我的问题是针对iOS的,而他们的问题是针对android的。

用例

我的情况是想象一个用户正在地铁上乘坐火车(没有网络),但决定发送电子邮件。然后关闭应用程序,甚至关掉手机。一个小时后,当用户重新打开手机并检测到网络时,该应用程序会发送电子邮件。

你有研究过Grand Central Dispatch吗?https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html - BergQuester
@BergQuester,我对我的问题进行了详细的阐述。iOS 提供的“Dispatch Queues”仅用于异步操作。它们似乎不能将数据保存到文件系统中,并且不断尝试发送直到成功。关于这一点,我错了吗?它们能够处理不良的网络连接问题吗:也就是说,在有网络可用时,它们能够保留数据并进行调度吗? - Katedral Pillon
我为我的问题冒犯了两个人感到抱歉。但请详细说明为什么您想关闭这个问题:也许我可以为您澄清;特别是那个给我负面评价的人。 - Katedral Pillon
@KetedralPillon GCD非常强大,有同步选项和跨队列协调选项。话虽如此,对于这种用例可能会有更好的工具,比如Aaron Brager的AFNetworking解决方案。 - BergQuester
3个回答

2

1

AFNetworking的请求操作和请求操作管理器可以进行修改,不需要太多工作即可实现此功能。

所需修改:

  • AFHTTPRequestOperation由于无连接而失败时,复制该操作并存储它(例如,在NSArray中)
  • 使用内置的可达性管理器,在可达性返回时重试数组中的操作
  • 如果操作成功,则从数组中删除操作

请注意,当操作被复制时,完成块不会被复制。根据文档:

  • -copy-copyWithZone:将返回具有原始NSURLRequest的新操作。因此,复制机制返回一个全新的实例,而不是在特定时间点的操作的精确副本,这对于重试操作非常有用。
  • 操作的副本不包括原始操作的outputStream
  • 操作的副本不包括completionBlock,因为它通常会强烈捕获对self的引用,否则在复制时会出现指向原始操作的令人费解的副作用。

我不知道是否有已经实现了这些修改的开源库,否则我会指向那里。


0

我找到了一个非常类似于path的作业优先级队列的库

https://github.com/lucas34/SwiftQueue/wiki

希望这篇文章能够帮助到一些人,虽然这是一个很老的问题,但对于像我这样仍在寻找答案的人可能会有所帮助 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接