【问题标题】:How to queue requests when underlying framework does not support queueing?底层框架不支持排队时如何对请求进行排队?
【发布时间】:2011-02-16 16:02:33
【问题描述】:

我觉得我的问题真的很n00b;如果我没有说清楚,请道歉:/

在我的项目中,我使用的是第 3 方框架,它使用异步 NSURLRequests(RESTful API)为我获取一些数据。 当接收到数据并准备好时,调用委托函数didReceiveResponse。在错误情况下调用didFailWithError

问题是:框架不能对请求进行排队,所以如果我按顺序调用请求方法,我只会收到最后一个请求的响应。

现在的问题是我无法更改框架的代码。鉴于此,有没有办法解决这个问题?类似于:对于一组请求,直到请求 n 完成(调用 didReceiveResponsedidFailWithError),才会发出 n+1 请求;此外,当一组中的最后一个请求完成时,我会收到一种通知。理想情况下,该解决方案应该同时支持 iOS3 和 iOS4。

【问题讨论】:

  • @deanWombourne:该框架尚未公开。

标签: iphone asynchronous notifications queue nsoperation


【解决方案1】:

似乎您唯一的选择是控制您开始请求的方法。为此,我会将期望请求的概念抽象为它自己的对象或工厂:称之为Command,或SingleRequestFactory,或其他任何名称。将这些对象保存在一个数组中,当您收到didReceiveResponsedidFailWithError 时,将下一个Command 出列并使用它来构造下一个请求,然后将其传递给第三方框架。如果您收到 didReceiveResponsedidFailWithError 并且队列为空,请发布您的通知。

最好创建一个自己执行所有这些逻辑的对象,这样您的视图控制器/无论什么抛出这些请求都可以告诉对象排队 Command 而无需保留队列本身.

【讨论】:

  • 我正在考虑类似的事情,但你已经很好地塑造了这个想法,所以我可以把它翻译成代码:) 谢谢!
  • 跟进问题:我正在按照您的建议做事,但在 UI 中出现崩溃。在viewDidLoad 中,我开始了我的流程,因此发送了第一个请求(异步NSURLRequest),我得到了我的didReceiveResponsedidFailWithError,并为下一个请求相应地调整队列。但是,在启动该过程后,立即调用viewWillAppear,我将UIWebView 更新为loadHTMString。实际上,如果我触摸屏幕,我会看到一个空白屏幕而不是我的 Web 视图和崩溃。奇怪的是,当我不开始这个过程时,一切都很好。我在为viewDidLoad 做错事吗?
  • 好的,明白了:)成为过分热心的记忆公民是一个自己的目标;)
猜你喜欢
  • 2018-10-13
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2011-06-14
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多