我创建了一个继承自AFURLSessionManager的类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
但它不起作用:(
感谢。
答案 0 :(得分:4)
对我来说,取消所有请求的最佳方式是:
[ 0, 0, 1, 0]
[ 0, 0, 0, 1]
[ (3*y1^2)/(y1^2 + y2^2)^(5/2) - 1/(y1^2 + y2^2)^(3/2), (3*y1*y2)/(y1^2 + y2^2)^(5/2), 0, 0]
[ (3*y1*y2)/(y1^2 + y2^2)^(5/2), (3*y2^2)/(y1^2 + y2^2)^(5/2) - 1/(y1^2 + y2^2)^(3/2), 0, 0]
这种方法有一个很大的优势:所有正在执行的请求都会调用失败块。我的意思是这个例子:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //manager should be instance which you are using across application
[manager.session invalidateAndCancel];
你需要知道的两件事:
答案 1 :(得分:3)
使用NSURLSession取消所有dataTasks:
manager.session.getTasksWithCompletionHandler { (dataTasks, uploadTasks, downloadTasks) in
dataTasks.forEach { $0.cancel() }
}
答案 2 :(得分:1)
也许使用AFURLSessionManager
// Invalidates the managed session, optionally canceling pending tasks.
- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks
这不是你想要的吗?
答案 3 :(得分:0)
我创建了一系列任务:
var tasks = [URLSessionDataTask]()
然后在发出新的http请求之前附加我想要取消的dataTask
:
tasks.append(dataTask)
为了取消所有操作,我使用了:
func cancelPreviousRequest() {
for task in tasks
(task as URLSessionTask).cancel()
}
tasks.removeAll()
}