取消所有操作+ AFNetworking 3.0
我创build了一个从AFURLSessionManagerinheritance的类HTTPServiceProvider。 添加下面的代码来获取数据。
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() let manager = AFURLSessionManager(sessionConfiguration: configuration) let dataTask = manager.dataTaskWithRequest(request) { (response, responseObject, error) in //Perform some task } dataTask.resume()
我想添加dataTask到AFURLSesstionManger提供的operationQueue,并在再次调用相同的请求之前取消其他一些类(BaseController.swift)中的所有操作。
试过这个代码,但不工作 –
self.operationQueue.addOperationWithBlock{ //Added above code }
而在BaseController.swift文件里面,叫做 –
HTTPServiceProvide.sharedInstance.operationQueue.cancelAllOperations
但它不工作:(
谢谢。
用NSURLSession取消所有的dataTasks:
manager.session.getTasksWithCompletionHandler { (dataTasks, uploadTasks, downloadTasks) in dataTasks.forEach { $0.cancel() } }
对我来说,取消所有请求的最好方法是:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //manager should be instance which you are using across application [manager.session invalidateAndCancel];
这种方法有一个很大的优势:所有正在执行的请求都会调用失败块。 我的意思是这个例子:
[manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { code } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { code } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //this section will be executed }];
2件事你需要知道:
- 它将取消仅使用AFHTTPSessionManager的这个确切实例执行的请求,该实例将用于invalidateAndCancel
- 在取消所有的请求之后,你必须初始化AFHTTPSessionManager的新实例 – 当你试图用旧的请求时,你会得到exception
我创build了一个任务数组。
var tasks = [URLSessionDataTask]()
然后在创build新的http请求之前添加所有我想要取消的dataTask
tasks.append(dataTask)
取消所有的操作,我用了
func cancelPreviousRequest(){ for task in tasks (task as URLSessionTask).cancel() } tasks.removeAll() }