如何在后台取消所有 afhttpsessionmanagers 请求?

hac*_*ker 3 ipad ios nsurlsession afhttpsessionmanager afnetworking-3

我有一个应用程序,我在其中使用会话管理器调用同步请求,在

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
Run Code Online (Sandbox Code Playgroud)

我正在使用全局

@property(strong,nonatomic)AFHTTPSessionManager *manager;
Run Code Online (Sandbox Code Playgroud)

并在 viewdidload 中分配

manager = [[AFHTTPSessionManager alloc] init];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes =  [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
    AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];

    [manager setResponseSerializer:responseSerializer];
Run Code Online (Sandbox Code Playgroud)

并且一组请求在一个循环中发生。我可以选择取消我正在做的所有请求

for (manager in self.arrayOfTasks) {

        [manager invalidateSessionCancelingTasks:YES];
    }




    manager=nil;
Run Code Online (Sandbox Code Playgroud)

,但问题是在取消之后,这个请求也一次又一次地发生。它不是取消。有人可以指导我找到我出错的地方吗?

Abi*_*ian 5

您可以尝试使用以下代码来取消为 AFHTTPSession Manager 启动的所有任务:

 for (NSURLSessionTask *task in manager.tasks)
    {
        [task cancel];
    }
Run Code Online (Sandbox Code Playgroud)

也用于个人上传和下载任务取消:

下载任务取消:

 for (NSURLSessionTask *task in manager.downloadTasks)
        {
            [task cancel];
        }
Run Code Online (Sandbox Code Playgroud)

上传任务取消:

 for (NSURLSessionTask *task in manager.uploadTasks)
        {
            [task cancel];
        }
Run Code Online (Sandbox Code Playgroud)