使用AFN的AFHTTPSessionManager 怎么样停止当前的请求

iOS 码拜 9年前 (2016-03-26) 2068次浏览
本人的每一个HTTP请求都是调用下面的这个函数的,每个页面都会有多个这样的请求,本人想在页面离开的时候停止调用,问一下本人应该怎么样操作?
+(void)requestWithUrl:(NSString* )url
param:(NSDictionary*)param
completionHandle:(NetworkFetcherCompletionHandle)completion
failureHandle:(NetworkFetcherErrorHandle)failure
{

AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
session.requestSerializer.timeoutInterval = 60;// 请求超时时间是60秒
[session.requestSerializer setValue:@”” forHTTPHeaderField:@”lat”];
[session.requestSerializer setValue:@”” forHTTPHeaderField:@”lng”];

if (param != nil) { // 参数不为空的时候
[session POST:url parameters:param progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
//DLog(@”data: %@”,responseObject);
if (completion) {
completion(responseObject);
}

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}else{ // 参数为空的时候
[session POST:url parameters:param progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
if (completion) {
completion(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
}

解决方案

10

试下这个方法:
– (NSURLSessionDataTask *)DELETE:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure;

30

  页面消失的方法里面写一个 cancel的方法   取消全部请求

60

在你每次发起请求的时候都会返会一个NSURLSessionDataTask对象
所以你只要定义一个变量接收这个对象,然后通过这个对象来放弃请求
NSURLSessionDataTask *req= [session POST:url parameters:param progress:^(NSProgress * _Nonnull uploadProgress) {
…..blabla
}
然后需要取消的时候直接
[req cancel];
就可以了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用AFN的AFHTTPSessionManager 怎么样停止当前的请求
喜欢 (0)
[1034331897@qq.com]
分享 (0)