如何在注销期间取消所有 NSMutableURLRequest?

Posted

技术标签:

【中文标题】如何在注销期间取消所有 NSMutableURLRequest?【英文标题】:How can I cancel all the NSMutableURLRequest during logout? 【发布时间】:2016-06-23 15:52:29 【问题描述】:

我正在使用NSMutableURLRequest 向服务器发出 HTTP 请求。现在由于网络速度较慢,需要一些时间才能获得响应,并且在这之间我想从我的应用程序中注销。由于多个请求已经在logout 之前发送到服务器,它会带来一些来自服务器的响应。我已经从应用程序中注销,所以我don't want to process those response 并想cancel all the pending request 队列中的所有内容。

那么如何在注销后停止获得所有响应?我应该使用一些标签logout 并检查它吗?

代码片段:-

+(void) httpRequestWithUrl:(NSString *)path onComplection:(RequestCompletionHandler)complect 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:path]];
    [request setHTTPMethod:@"GET"];

    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];

    NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc]init];


    [NSURLConnection sendAsynchronousRequest:request
                                   queue:backgroundQueue
                       completionHandler:^(NSURLResponse *response,NSData *data,NSError *error)
                           NSString *result = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
                           if(complect)
                               complect(result,error);
                       
     ];


编辑:-

What about AFNetworking ?

【问题讨论】:

您可以使用某种支持取消的包装类或使用您提到的会话/注销标签。 你在使用 NSURLSession 吗?这可以取消。请向我们展示一些代码,以便我们了解您是如何应用 URLRequest 的。 您可以使用[connection cancel]; 或取消this answer 中所述的AFNetworking 请求。值得注意的是,您不能取消 请求,只能取消 URL 连接数据任务 检查这个:[NSObject cancelPreviousPerformRequestsWithTarget:self]; 您可以将所有NSURLConnection 对象存储在一个数组中,然后调用[array makeObjectsPerformSelector:@selector(cancel)]。但可能更清洁/更好地使用操作队列(或 AFNetworking,它已经为您完成了所有这些工作) 【参考方案1】:

我会推荐使用 NSURLSession 而不是 NSURLConnection。它是专门为使这更容易而设计的。创建单个会话,当用户注销时,对现有会话调用 invalidateAndCancel(然后在单独的会话中注销)。

真的,此时基于 NSURLConnection 编写代码的唯一正当理由是为了支持 ios 6 及更早版本/OS X v10.8 及更早版本,并且听起来您正在编写新代码,所以...请使用更现代的 API。

【讨论】:

以上是关于如何在注销期间取消所有 NSMutableURLRequest?的主要内容,如果未能解决你的问题,请参考以下文章

注销时取消订阅所有订阅#Quickblox APNS & APNS.VOIP

如何在注销期间清除 SharedPreferences? [复制]

如何在注销时取消设置特定的 php 会话

在注销期间破坏用户会话是不是足够?

当用户关闭浏览器而不单击注销时销毁或取消设置会话[重复]

如何在 React Native 的抽屉中添加注销按钮