我在我的应用程序中使用 AFNetworking,并尝试在我的进度 HUD 中实现“点击取消”功能。我有一个管理所有 HTTP 请求的单例类。如果点击进度HUD,我会调用:
[[[HTTPRequestSingleton sharedClient] operationQueue] cancelAllOperations];
但这不会像我需要的那样“取消”操作。我阅读了NSOperationQueue
文档并遇到了这个:
取消操作对象会使对象留在队列中,但会通知对象它应该尽快中止其任务。对于当前正在执行的操作,这意味着操作对象的工作代码必须检查取消状态,停止正在执行的操作,并将自身标记为已完成。对于已排队但尚未执行的操作,队列仍必须调用操作对象的 start 方法,以便它可以处理取消事件并将自己标记为已完成。
关于cancelAllOperations
方法:
此方法向队列中当前的所有操作发送取消消息。排队的操作在开始执行之前被取消。如果一个操作已经在执行,则由该操作来识别取消并停止它正在执行的操作。
我的问题似乎特别涉及已经执行的操作,我想立即取消。使用 AFNetworking,我如何提醒操作它应该取消并丢弃有关请求的所有信息?
用于操作的代码
AFJSONRequestOperation *loginOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//operation was successful
if (loginOperation.isCancelled)
{
//can't do this. variable 'loginOperation' is uninitialized when captured by block
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
//operation failed
}];