- (NSURLSessionDataTask *)defaultRequestwithURL: (NSString *)URL withParameters: (NSDictionary *)parameters withMethod: (NSString *)method withBlock:(void (^)(NSDictionary *dict, NSError *error))block
{
//默认打印传入的实参
#ifdef DEBUG
NSLog(@"common method = %@", method);//get 或 post
NSLog(@"common URL = %@", URL);//所请求的网址
NSLog(@"common parameters = %@", parameters);//传入的参数
#endif
//根据method字符串判断调用AFNetworking里的get方法还是post方法
if ( [method isEqualToString:@"GET"] ) {//所用到的是AFNetworking3.1.0里的方法,其新加了progress进度block
return [[AFAppDotNetAPIClient sharedClient] GET:URL parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable JSON) {
#ifdef DEBUG
NSLog(@"common get json = %@", JSON);//打印获取到的json
#endif
NSDictionary *dict = JSON;//直接返回字典,方便使用
if (block) {
block(dict, nil);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//如果请求出错返回空字典和NSError指针
if (block) {
block([NSDictionary dictionary], error);//这一点算是比较坑的地方了,因为比如我要根据一个字段来判断是否请求成功,我对一个空字典@{},
//根据一个key取value:[@{} objectForKey:@"errorCode"],
//然后判断字符串的intValue是否等于0:[[@{} objectForKey:@"errorCode"] intValue] == 0是返回1的。
//我想的解决办法就是从服务器端来改,返回的字段key用isSuccess,value是字符串True或False即可解决,
//但是这样又只能知道成功或失败并不能根据errorCode码进行其他操作,因为errorCode可以为0、1、2、3等等。
}
//从指针级判断error是否为空,如果不为空就打印error
if (error) {
NSLog(@"%@",error);
}
}];
}
//post相关代码
return [[AFAppDotNetAPIClient sharedClient]POST:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable JSON) {
#ifdef DEBUG
NSLog(@"common post json = %@", JSON);//打印获取到的json
#endif
NSDictionary *dict = JSON;//直接返回字典,方便使用
if (block) {
block(dict, nil);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//如果请求出错返回空字典和NSError指针
if (block) {
block([NSDictionary dictionary], error);
}
//从指针级判断error是否为空,如果不为空就打印error
if (error) {
NSLog(@"%@",error);
}
}];
//返回值暂时用不到,不需要创建变量接收;传进的self指针也没有用到所以这个方法可移植性很强
}
-(void)request
{
//测试网络请求方法
//1.所用到的网址是本人以前抓到的,API是用php写的,服务器很稳定,我常用来测试,也仅供测试
//2.get参数 start和end传无符号整数
NSDictionary *parameters = @{
@"type":@"list",
@"city":@"2",
@"lid":@"31",
@"sortby":@"1",
@"start":@"0",
@"end":@"3"
};
[self defaultRequestwithURL:@"/api.php" withParameters:parameters withMethod:@"GET" withBlock:^(NSDictionary *dict, NSError *error) {
}];
}
|