AFNetworking導(dǎo)入工程
網(wǎng)絡(luò)請求類名NetworkTool繼承AFHTTPSessionManager
NetworkTool.h
#import "AFHTTPSessionManager.h"
@interface NetworkTool : AFHTTPSessionManager
/**
* 網(wǎng)絡(luò)請求工具類全局訪問點(diǎn)
*
* @return AFHTTPSessionManager的實(shí)例
*/
+ (instancetype)sharedNetworkTool;
/**
* 網(wǎng)絡(luò)請求工具類請求的主方法
*
* @param URLString 請求地址
* @param success 成功的回調(diào)
* @param failure 失敗的回調(diào)
*/
+ (void)POSTWithURLString:(NSString *)URLString parameters:(NSMutableDictionary *)parameters
success:(void(^)(id responseObject))success faile:(void(^)(NSError *error))failure;
@end
NetworkTool.m
#import "NetworkTool.h"
#import "AFNetworking.h"
@implementation NetworkTool
+ (instancetype)sharedNetworkTool
{
static NetworkTool *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 設(shè)置相對路徑
NSURL *BaseURL = [NSURL URLWithString:@""];
// 實(shí)例化Manager
instance = [[self alloc] initWithBaseURL:BaseURL];
// 增加AFN支持的文件類型
instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain", nil];
});
return instance;
}
//網(wǎng)絡(luò)請求方法
+ (void)POSTWithURLString:(NSString *)URLString parameters:(NSMutableDictionary *)parameters
success:(void(^)(id responseObject))success faile:(void(^)(NSError *error))failure
{
//大P為key,由接口決定,也可不需要
NSData *data = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:nil];
NSString *JsonStr=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSMutableDictionary *parameterDic = [[NSMutableDictionary alloc]init];
[parameterDic setObject:JsonStr forKey:@"P"];
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
sessionManager.requestSerializer.timeoutInterval = 15.f;
sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[sessionManager POST:URLString parameters:parameterDic progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog((@"\n[函數(shù)名:%s]\n" "[行號:%d]\n" "參數(shù)%@\n"), __FUNCTION__, __LINE__,parameters);
NSLog((@"\n[函數(shù)名:%s]\n" "[行號:%d]\n" "地址%@\n"), __FUNCTION__, __LINE__,URLString);
NSLog((@"\n[函數(shù)名:%s]\n" "[行號:%d]\n" "返回%@\n"), __FUNCTION__, __LINE__,responseObject);
success(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(error);
NSLog((@"該接口返回錯誤==%@\n參數(shù)是==%@\n錯誤是==%@\n"),URLString,parameters,error);
[self testNetwork];//查詢當(dāng)前網(wǎng)絡(luò)
}];
}
+(void)testNetwork
{
// 監(jiān)測網(wǎng)絡(luò)環(huán)境
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
/*
status
AFNetworkReachabilityStatusUnknown = -1, 不知道監(jiān)測的是什么
AFNetworkReachabilityStatusNotReachable = 0, 沒有檢測到網(wǎng)絡(luò)
AFNetworkReachabilityStatusReachableViaWWAN = 1, 蜂窩網(wǎng)
AFNetworkReachabilityStatusReachableViaWiFi = 2, WIFI
*/
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status == 0) {
//沒有檢測到網(wǎng)絡(luò)!
}
}];
[manager startMonitoring];
}