取消所有操作+ AFNetworking 3.0

时间:2016-08-23 04:07:21

标签: ios swift afnetworking-3

我创建了一个继承自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

但它不起作用:(

感谢。

4 个答案:

答案 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];

你需要知道的两件事:

  • 它将取消仅使用您将用于invalidateAndCancel的AFHTTPSessionManager的确切实例执行的请求
  • 取消所有请求后,您必须初始化AFHTTPSessionManager的新实例 - 当您尝试使用旧实例发出请求时,您将获得异常

答案 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()
}