我在我的应用程序中使用AFNetworking,我正在尝试在我的进度HUD中实现"点按取消"功能.我有一个管理所有HTTP请求的单例类.如果点击进度HUD,我打电话:
[[[HTTPRequestSingleton sharedClient] operationQueue] cancelAllOperations];
Run Code Online (Sandbox Code Playgroud)
但这并不像我需要的那样"取消"操作.我阅读了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
}];
Run Code Online (Sandbox Code Playgroud)