afn取消所有网络请求 ios

2017-08-10 10:38:02 MinggeQingchun 阅读数 8078

AFN设置请求超时时间

第一种:

//设置超时
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval = 30.f;
[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];

第二种:

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.timeoutIntervalForRequest = 15.0;
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];

既然有请求超时的设置,自然也有请求超时的错误,其错误码对应如下:-1001

这时在错误中截取错误码并进行如下处理:

[manager POST:url parameters:data progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
//        NSLog(@"url====%@\n返回数据%@",url,responseObject);
        if (result) {
            result(responseObject);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error ==%@",error);
        //请求超时
        if (error.code  == -1001) {
            //1、获取当前viewController
            UIViewController *viewController = [[CommFun singleton] getCurrentVC];
            //2、隐藏加载框
            [MBProgressHUD hideHUDForView:viewController.view animated:YES];
            //3、弹出提示:请求超时
            SHOWALERT(@"请求超时,请刷新后再试!", viewController);
        }
    }];

苹果相应的错误码如下:

enum {
    NSURLErrorUnknown = -1,
    NSURLErrorCancelled = -999,
    NSURLErrorBadURL = -1000,
    NSURLErrorTimedOut = -1001,
    NSURLErrorUnsupportedURL = -1002,
    NSURLErrorCannotFindHost = -1003,
    NSURLErrorCannotConnectToHost = -1004,
    NSURLErrorDataLengthExceedsMaximum = -1103,
    NSURLErrorNetworkConnectionLost = -1005,
    NSURLErrorDNSLookupFailed = -1006,
    NSURLErrorHTTPTooManyRedirects = -1007,
    NSURLErrorResourceUnavailable = -1008,
    NSURLErrorNotConnectedToInternet = -1009,
    NSURLErrorRedirectToNonExistentLocation = -1010,
    NSURLErrorBadServerResponse = -1011,
    NSURLErrorUserCancelledAuthentication = -1012,
    NSURLErrorUserAuthenticationRequired = -1013,
    NSURLErrorZeroByteResource = -1014,
    NSURLErrorCannotDecodeRawData = -1015,
    NSURLErrorCannotDecodeContentData = -1016,
    NSURLErrorCannotParseResponse = -1017,
    NSURLErrorInternationalRoamingOff = -1018,
    NSURLErrorCallIsActive = -1019,
    NSURLErrorDataNotAllowed = -1020,
    NSURLErrorRequestBodyStreamExhausted = -1021,
    NSURLErrorFileDoesNotExist = -1100,
    NSURLErrorFileIsDirectory = -1101,
    NSURLErrorNoPermissionsToReadFile = -1102,
    NSURLErrorSecureConnectionFailed = -1200,
    NSURLErrorServerCertificateHasBadDate = -1201,
    NSURLErrorServerCertificateUntrusted = -1202,
    NSURLErrorServerCertificateHasUnknownRoot = -1203,
    NSURLErrorServerCertificateNotYetValid = -1204,
    NSURLErrorClientCertificateRejected = -1205,
    NSURLErrorClientCertificateRequired = -1206,
    NSURLErrorCannotLoadFromNetwork = -2000,
    NSURLErrorCannotCreateFile = -3000,
    NSURLErrorCannotOpenFile = -3001,
    NSURLErrorCannotCloseFile = -3002,
    NSURLErrorCannotWriteToFile = -3003,
    NSURLErrorCannotRemoveFile = -3004,
    NSURLErrorCannotMoveFile = -3005,
    NSURLErrorDownloadDecodingFailedMidStream = -3006,
    NSURLErrorDownloadDecodingFailedToComplete = -3007
}

 

2016-04-27 18:23:56 ridxmc 阅读数 3158

#import "ViewController.h"

#import "AFNetworking.h"

#import "CZNetworkTool.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // 使用 AFN ,导入 AFNetworking.h

    

    // AFHTTPRequestOperationManager开发中最常见的!负责发送网络请求.内部是对 NSUrlConnection的封装!

    

    // AFHTTPSessionManager Xcode7之后使用最多的类!内部封装的时 NSUrlSession.

    // AFHTTPSessionManager 中发送网络请求的方法名称和AFHTTPRequestOperationManager是一模一样的!

    

    // AFNetworkReachabilityManager:监测网络状态(实时监测应用当前的网络情况 3G/4G WIFI m没有网络未知的网络状态)

    

    // AFSecurityPolicy : 安全策略:用来做安全 HTTPS :安全需要服务器支持!

    

    // AFURLRequestSerialization :序列化工具:只能使用他的子类!

    // AFN 默认情况下,会解析 JSON数据!

    // 如果服务器传回来的不是 JSON数据,如要手动执行解析器类型!

}


-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [selfdemo2];

}


-(void)demo2{

    // 上传文件的文件路径

    NSString *path =@"/Users/liaojianguo/Desktop/hehua.jpg";

    

    NSURL *url = [NSURLURLWithString:[NSStringstringWithFormat:@"file://%@",path]];

    

    // 实例化自己写的网络工具类!目的:获得文件类型!

    CZNetworkTool *tool = [CZNetworkToolsharedNetworkTool];

    

    NSURLResponse *response = [toolgetFileTypeWithFilepath:path];

    

    NSString *type = response.MIMEType;

    

    // 使用 AFN实现文件上传!  AFN只支持单文件上传! ASI支持多文件上传!

    

    // 1.实例化网络工具管理类!

    

    AFHTTPSessionManager *manager = [AFHTTPSessionManagermanager];

    

    // 2.选择请求方法,发送请求!上传: POST

    

    [manager POST:@"http://127.0.0.1/httpLogin/post/upload.php"parameters:nilconstructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        

        // FileURL:需要上传的文件的文件路径!

        [formData appendPartWithFileURL:urlname:@"userfile"fileName:@"hehua"mimeType:typeerror:NULL];

        

        

    } success:^(NSURLSessionDataTask *task,id responseObject) {

        

        // 返回的是 OC数据!

        NSLog(@"网络请求成功: responseObject:%@",responseObject);

        

    } failure:^(NSURLSessionDataTask *task,NSError *error) {

        //

        NSLog(@"网络请求失败");

    }];

}


// AFN 上传文件

-(void)demo1{

    // 上传文件的文件路径

    NSString *path =@"/Users/liaojianguo/Desktop/hehua.jpg";

    

    // 实例化自己写的网络工具类!目的:获得文件类型!

    CZNetworkTool *tool = [CZNetworkToolsharedNetworkTool];

    

    NSURLResponse *response = [toolgetFileTypeWithFilepath:path];

    

    NSString *type = response.MIMEType;

    

    NSData *data = [NSDatadataWithContentsOfFile:path];

    

    // 使用 AFN实现文件上传!  AFN只支持单文件上传! ASI支持多文件上传!

    

    // 1.实例化网络工具管理类!

    

    AFHTTPSessionManager *manager = [AFHTTPSessionManagermanager];

    

    // 2.选择请求方法,发送请求!上传: POST

    

    // 参数1:urlString :网络接口

    // 参数2:parameters :需要上传的普通文本参数!在开发中,一般都是传递字典!

    // 参数3:^(id<AFMultipartFormData> formData):封装上传的请求参数! formData:通过设置这个值,来设置请求体中的内容(格式化之后的上传数据)

    // 参数4:success :成功之后的回调

    // 参数5:failure :失败时候的回调

    

    [manager POST:@"http://127.0.0.1/httpLogin/post/upload.php"parameters:nilconstructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        

        // FileData:需要上传的文件的二进制数据!

        // name:服务器接受文件参数的 key!

        // fileName:文件在服务器上保存的名称!

        // mimeType:上传文件的文件类型!

        [formData appendPartWithFileData:dataname:@"userfile"fileName:@"荷花"mimeType:type];

        

        

    } success:^(NSURLSessionDataTask *task,id responseObject) {

        

        // 返回的是 OC数据!

        NSLog(@"网络请求成功: responseObject:%@",responseObject);

        

    } failure:^(NSURLSessionDataTask *task,NSError *error) {

        //

        NSLog(@"网络请求失败");

    }];

}


#pragma mark - XML的解析

/**

 // 请求的数据格式,发送给服务器的格式

 self.requestSerializer = [AFHTTPRequestSerializer serializer];

 AFHTTPRequestSerializer  二进制的数据格式(默认的)

 AFJSONRequestSerializer  JSON

 AFPropertyListRequestSerializer PList

 

 // 响应的解析器(默认直接解析JSON)

 self.responseSerializer = [AFJSONResponseSerializer serializer];

 AFHTTPResponseSerializer   二进制

 AFJSONResponseSerializer   JSON  (默认的数据格式)

 AFXMLParserResponseSerializer  XML的解析器

 AFImageResponseSerializer  Image

 (处理网络图片的问题, SDWebImage)     */

- (void)getXML

{

    NSString *urlStr =@"http://127.0.0.1/max/Contents.xml";

    

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    

    // 指定我们的响应的解析器是解析XML(会返回NSXMLParser:对象)也就是需要SAX方式手动解析

        manager.responseSerializer = [AFXMLParserResponseSerializerserializer];

    

    // 假如想使用DOM进行解析XML,可以指定响应的类型是二进制。拿到二进制数据就可以进行DOM解析

//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    

    // GET方法

    [manager GET:urlStrparameters:nilsuccess:^(AFHTTPRequestOperation *operation,id responseObject) {

        

        // 已经把反序列化完成的结果都直接返回了。可以更新UI

        

        NSLog(@"%@  %@", responseObject, [NSThreadcurrentThread]);

        

    } failure:^(AFHTTPRequestOperation *operation,NSError *error) {

        

        NSLog(@"%@", error);

        

    }];

}


#pragma mark - 常规的方法

/**

 POST方法,如果需要传递参数,也可以以字典的形式传递.

 */

/**post登录*/

- (void)postLogin

{

    NSString *urlStr =@"http://127.0.0.1/httpLogin/login.php";

    

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    

    NSDictionary *params =@{@"password" :@"zhang", @"username" :@"zhangsan"};

    

    // POST方法

    [manager POST:urlStrparameters:params success:^(AFHTTPRequestOperation *operation,id responseObject) {

        

        NSLog(@"%@  %@", responseObject, [NSThreadcurrentThread]);

        

    } failure:^(AFHTTPRequestOperation *operation,NSError *error) {

        NSLog(@"%@", error);

        

    }];

}


/**

 1. 没有URL,只需要指定一个url的字符串

 2. 网络请求是异步。完成以后的回调代码快直接是在主线程

 3. 已经实现了反序列化

 4. 如果get方法,需要传递参数,可以使用字段的方式传递。程序员不需要关心url里面的参数格式

 */

/**get登录*/

- (void)getLogin2

{

    NSString *urlStr =@"http://127.0.0.1/httpLogin/login.php";

    

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    

    NSDictionary *params =@{@"password" :@"zhang", @"username" :@"zhangsan"};

    

    // GET方法

    [manager GET:urlStrparameters:params success:^(AFHTTPRequestOperation *operation,id responseObject) {

        NSLog(@"%@  %@", responseObject, [NSThreadcurrentThread]);

    } failure:^(AFHTTPRequestOperation *operation,NSError *error) {

        NSLog(@"%@", error);

        

    }];

}


//get方法登录,一般不用

- (void)getLogin

{

    NSString *urlStr =@"http://127.0.0.1/httpLogin/login.php?username=zhangsan&password=zhang";

    

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    

    // GET方法

    [manager GET:urlStrparameters:nilsuccess:^(AFHTTPRequestOperation *operation,id responseObject) {

        NSLog(@"%@  %@", responseObject, [NSThreadcurrentThread]);

    } failure:^(AFHTTPRequestOperation *operation,NSError *error) {

        NSLog(@"%@", error);

        

    }];

}


- (void)getDemo

{

    NSString *urlStr =@"http://127.0.0.1/max/Contents.json";

    

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    

    // GET方法

    [manager GET:urlStrparameters:nilsuccess:^(AFHTTPRequestOperation *operation,id responseObject) {

        

        // 已经把反序列化完成的结果都直接返回了。可以更新UI

        

        NSLog(@"%@  %@", responseObject, [NSThreadcurrentThread]);

        

    } failure:^(AFHTTPRequestOperation *operation,NSError *error) {

        NSLog(@"%@", error);

        

    }];

    

    NSLog(@"完成");

    

}



 项目中有时会有这种情况,当界面正在请求数据,但数据为返回之前。返回到上一个界面,这种情况下,应取消此界面的网络请求。此篇就是为了处理此种情况下的操作,可        以取消单个请求队列,如果界面接口很多,可以一次性取消所有请求队列。

    AFHTTPSessionManager *manager = [AFHTTPSessionManagermanager];

    

    NSURLSessionDataTask *ljTask = [manager GET:@"url地址"parameters:@"入参"progress:^(NSProgress *_NonnulldownloadProgress) {

        

        //数据请求进度

        

    } success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {

        

        //请求成功

        

        

    } failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {

        

        //请求失败

        

    }];

    

    //取消单个网络请求

    [ljTask cancel];

    

    //取消所有的网络请求

    [manager.operationQueuecancelAllOperations];




2018-09-20 16:59:00 weixin_34077371 阅读数 383

1.页面返回的时候,将取消网络请求。

  场景应用:在一个界面进行多个请求的时候,用户有可能在网路请求没有完成时点击了返回按钮,

此时ViewController不会马上销毁,要等到网络请求返回并执行完毕block后才会销毁ViewController。

  场景应用:在流程界面获取关联流程数据的条数,在流程界面请求完数据后将数据传过去,若没有

完场,则在关联流程界面再次请求数据,需要将上一界面的网络请求取消

  

#import <UIKit/UIKit.h>

@interface BaseViewController : UIViewController

//记录将需要在退出ViewController取消的请求
- (void)addSessionDataTask:(NSURLSessionDataTask *)task;

//移除已经请求成功的请求
- (void)removeSessionDataTask:(NSURLSessionDataTask *)task;

//取消所有的请求
- (void)cancelAllSessionDataTask;

@end

 

#import "BaseViewController.h"

@interface BaseViewController ()

@property (nonatomic, strong) NSMutableArray<NSURLSessionDataTask *> *sessionDataTaskMArr;


@end

@implementation BaseViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view.
}

- (NSMutableArray *)sessionDataTaskMArr {
  if (_sessionDataTaskMArr == nil) {
    _sessionDataTaskMArr = [NSMutableArray array];
  }
  return _sessionDataTaskMArr;
}

- (void)addSessionDataTask:(NSURLSessionDataTask *)task {
  if (task == nil) {
  return;
  }
  [self.sessionDataTaskMArr addObject:task];
}

- (void)removeSessionDataTask:(NSURLSessionDataTask *)task {
  [self.sessionDataTaskMArr removeObject:task];
}

- (void)cancelAllSessionDataTask {
  if (self.sessionDataTaskMArr.count <= 0) {
  return;
  }
  for (NSURLSessionDataTask *dataTask in self.sessionDataTaskMArr) {
    if (dataTask.state == NSURLSessionTaskStateRunning || dataTask.state == NSURLSessionTaskStateSuspended ) {
      [dataTask cancel];
    }
  }
  [self.sessionDataTaskMArr removeAllObjects];
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
}

 

 

 

转载于:https://www.cnblogs.com/lcl15/p/9681409.html

2016-01-26 21:44:17 hero_wqb 阅读数 2331

对AFN网络请求进行封装,代码如下:

/************************* .h文件 *************************/
#import <Foundation/Foundation.h>

@interface HWManagerTool : NSObject

/**
 *  发送一个POST请求
 *
 *  @param url     请求路径
 *  @param params  请求参数
 *  @param success 请求成功后的回调
 *  @param failure 请求失败后的回调
 */
+ (void)postWithURL:(NSString *)url params:(NSDictionary *)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;

/**
 *  发送一个GET请求
 *
 *  @param url     请求路径
 *  @param params  请求参数
 *  @param success 请求成功后的回调
 *  @param failure 请求失败后的回调
 */
+ (void)getWithURL:(NSString *)url params:(NSDictionary *)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;

@end

/************************* .m文件 *************************/
#import "HWManagerTool.h"
#import "AFNetworking.h"

@implementation HWManagerTool

+ (void)postWithURL:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
    // 创建请求管理对象
    AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
    session.responseSerializer = [AFJSONResponseSerializer serializer];
    session.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
    
    // 设置超时时间
    [session.requestSerializer willChangeValueForKey:@"timeoutInterval"];
    session.requestSerializer.timeoutInterval = 30.f;
    [session.requestSerializer didChangeValueForKey:@"timeoutInterval"];
    
    // 发送请求
    [session POST:url parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (success) {
            success(responseObject);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)getWithURL:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
    // 创建请求管理对象
    AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
    session.responseSerializer = [AFJSONResponseSerializer serializer];
    session.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
    
    // 设置超时时间
    [session.requestSerializer willChangeValueForKey:@"timeoutInterval"];
    session.requestSerializer.timeoutInterval = 30.f;
    [session.requestSerializer didChangeValueForKey:@"timeoutInterval"];
    
    // 发送请求
    [session GET:url parameters:params progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (success) {
            success(responseObject);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

@end

对项目网络请求进行封装,代码如下:

/************************* .h文件 *************************/
#import <Foundation/Foundation.h>

@interface HWNetwork : NSObject

// 登录
+ (void)postLoginInfoWithUsername:(NSString *)username password:(NSString *)password success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;

// 首页信息
+ (void)getHomeInfoSuccess:(void (^)(id json))success failure:(void (^)(NSError *error))failure;

@end

/************************* .m文件 *************************/
#import "HWNetwork.h"
#import "HWManagerTool.h"

#define KIP @"https://api.ceshi.com"

// 登录
#define KLoginInfo [NSString stringWithFormat:@"%@/index.php?s=public/login", KIP]

// 首页信息
#define KHomeInfo [NSString stringWithFormat:@"%@/index.php?s=public/home", KIP]

@implementation HWNetwork

// 登录
+ (void)postLoginInfoWithUsername:(NSString *)username password:(NSString *)password success:(void (^)(id json))success failure:(void (^)(NSError *error))failure
{
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    [params setValue:username forKey:@"phone"];
    [params setValue:password forKey:@"password"];
    
    [HWManagerTool postWithURL:KLoginInfo params:params success:^(id json) {
        if (success) {
            success(json);
        }
    } failure:^(NSError *error) {
        if (failure) {
            failure(error);
        }
    }];
}

// 首页信息
+ (void)getHomeInfoSuccess:(void (^)(id json))success failure:(void (^)(NSError *error))failure
{
    [HWManagerTool getWithURL:KHomeInfo params:nil success:^(id json) {
        if (success) {
            success(json);
        }
    } failure:^(NSError *error) {
        if (failure) {
            failure(error);
        }
    }];
}

@end

控制器调用:

- (void)getInfo
{
    // 登录
    [HWNetwork postLoginInfoWithUsername:@"asdf" password:@"123456" success:^(id json) {
        
    } failure:^(NSError *error) {
        
    }];
    
    // 获取首页信息
    [HWNetwork getHomeInfoSuccess:^(id json) {
        
    } failure:^(NSError *error) {
        
    }];
}


利用AFN监听网络改变,封装为单利,代码如下:

/************************* .h文件 *************************/
#import "AFNetworkReachabilityManager.h"

@interface HWNetworkReachabilityManager : NSObject

// 当前网络状态
@property (nonatomic, assign, readonly) AFNetworkReachabilityStatus networkReachabilityStatus;

// 获取单例
+ (instancetype)shareManager;

// 监听网络状态
- (void)monitorNetworkStatus;


/************************* .m文件 *************************/
#import "HWNetworkReachabilityManager.h"

@interface HWNetworkReachabilityManager ()

@property (nonatomic, assign, readwrite) AFNetworkReachabilityStatus networkReachabilityStatus;

@end

@implementation HWNetworkReachabilityManager

+ (instancetype)shareManager
{
    static HWNetworkReachabilityManager *manager = nil;
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[self alloc] init];
    });
    
    return manager;
}

// 监听网络状态
- (void)monitorNetworkStatus
{
    // 创建网络监听者
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                // 未知网络,这里可以处理公共网络变更事件
                HWLog(@"当前网络:未知网络");
                break;
                
            case AFNetworkReachabilityStatusNotReachable:
                // 无网络
                HWLog(@"当前网络:无网络");
                break;
                
            case AFNetworkReachabilityStatusReachableViaWWAN:
                // 蜂窝数据
                HWLog(@"当前网络:蜂窝数据");
                break;
                
            case AFNetworkReachabilityStatusReachableViaWiFi:
                // 无线网络
                HWLog(@"当前网络:无线网络");
                break;
                
            default:
                break;
        }
        
        if (_networkReachabilityStatus != status) {
            _networkReachabilityStatus = status;
            // 网络改变通知,单独网络变更事件可以添加通知实现
            [[NSNotificationCenter defaultCenter] postNotificationName:HWNetworkingReachabilityDidChangeNotification object:[NSNumber numberWithInteger:status]];
        }
    }];
    
    // 开始监听
    [manager startMonitoring];
}

@end

在appDelegate中开启监听:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 开启网络监听
    [[HWNetworkReachabilityManager shareManager] monitorNetworkStatus];
    
    return YES;
}

其它控制器添加通知获取事件:

// 网路改变通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkingReachabilityDidChange:) name:HWNetworkingReachabilityDidChangeNotification object:nil];

#pragma mark - HWNetworkingReachabilityDidChangeNotification
- (void)networkingReachabilityDidChange:(NSNotification *)notification
{

}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
2016-04-21 14:01:57 a645258072 阅读数 8139

        项目中有时会有这种情况,当界面正在请求数据,但数据为返回之前。返回到上一个界面,这种情况下,应取消此界面的网络请求。此篇就是为了处理此种情况下的操作,可        以取消单个请求队列,如果界面接口很多,可以一次性取消所有请求队列。

    AFHTTPSessionManager *manager = [AFHTTPSessionManagermanager];

    

    NSURLSessionDataTask *ljTask = [manager GET:@"url地址"parameters:@"入参"progress:^(NSProgress *_Nonnull downloadProgress) {

        

        //数据请求进度

        

    } success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {

        

        //请求成功

        

        

    } failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {

        

        //请求失败

        

    }];

    

    //取消单个网络请求

    [ljTask cancel];

    

    //取消所有的网络请求

    [manager.operationQueuecancelAllOperations];