【问题标题】:Add operation in queue while requesting ASIHTTPRequest or AFNetworking请求 ASIHTTPRequest 或 AFNetworking 时在队列中添加操作
【发布时间】:2012-11-14 07:36:53
【问题描述】:

我想在执行请求中添加操作。我阅读了有关 ASINetworkQueue 的信息,但它添加了所有操作并全部运行。但我想将操作添加到运行队列中。

这可能吗?使用 ASIHTTPRequest 或 AFNetworking 我不介意,只要我得到我想要做的。

编辑

当我尝试添加另一个请求时,它显示以下错误。

[ASINetworkQueue addOperation:]:操作正在执行,不能入队'

【问题讨论】:

  • 这里到底有什么问题?您的请求当前正在执行还是队列已经在执行某些操作?如果操作已在另一个队列中执行,则无法将操作添加到队列中。这就是你要找的吗?
  • 是的,我的队列仍在执行,但我想在操作中添加另一个队列。这可能吗? AFNetworking 怎么样?
  • 我很困惑。您的操作正在执行并且您想添加到另一个队列?一个队列可以执行一些其他操作,你可以在那个时候添加任何操作。
  • 那么您确定您尝试添加的当前操作当前没有执行吗?如果它没有执行,您应该能够添加到队列中。当一个操作正在执行,然后你试图添加到某个队列时,上面的错误信息会正常显示。
  • 不,它正在执行。这就是为什么上面显示的错误。我正在寻找其他替代方案或解决方法

标签: objective-c ios asihttprequest afnetworking


【解决方案1】:

apple documentationaddOperation: 很明显,您不能将正在执行的操作添加到NSOperationQueue

这就是那里提到的,

一个操作对象一次最多可以在一个操作队列中,如果操作已经在另一个队列中,这个方法会抛出一个 NSInvalidArgumentException 异常。同样,如果操作当前正在执行或已经完成执行,则此方法会引发 NSInvalidArgumentException 异常。

这是NSOperationQueue 的默认行为。在添加到队列之前,您需要确保 NSOperation 没有执行。有各种属性,例如isExecutingisFinished 等。可以检查这一点。

【讨论】:

  • 即使您的操作不是isExecutingisFinished,如果您尝试将同一操作排入同一队列两次,也会抛出错误operation is executing and cannot be enqueued。您必须重新启动操作,然后再将其排入同一队列。
【解决方案2】:

您只需在请求队列中调用addOperation。在asi 中,对于它的ASiNetworkQueue,它是否正在运行应该无关紧要。

【讨论】:

  • 嗯...我读到的资源说不同。无法添加正在运行的操作。你确定?不过我没试过,明天试试。谢谢。
  • 好吧,我还没有尝试过,但从代码和标题文档看来它似乎不起作用
  • 当然,一个 NSOperationQueue(ASI 或 AFN)总是附加的,尽管你可以使用依赖项
  • 显然不能。它显示:[ASINetworkQueue addOperation:]: operation is executing and cannot be enqueued'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
相关资源
最近更新 更多