听说之后AFHttpWorking版本可能会影响到苹果的审核,今天下了最新版本的AFHttpWorking,并且做了简单的封装,我这里是通过cocoapods下载了两个工具

1=AFHttpWorking  2=JSONKit  为什么要下jsonkit勒,以前json解析都使用touchjson,偶然发现资料说jsonkit效率是第三方json解析中最高的,所以今天把它也下了来下,我这里只做了AFHttpWorking 的get/post/网络判断三个方法。下面我贴代码

.h文件

1
2
3
4
5
6
7
8
9
10
#import <Foundation/Foundation.h>
#import "AFDataDefine.h"
#import <AFNetworking/AFNetworking.h>
static NSStringconst  kAFAppDotNetAPIBaseURLString=@"http://www.xx.com";
@interface APIClient : AFHTTPSessionManager
+ (APIClient *)sharedClient;
-(void)getUrl:(NSString *)URLString parameters:(id)parameters call:(void (^)( RespInfo* info))callback;
-(void)postUrl:(NSString *)URLString parameters:(id)parameters call:(void (^)( RespInfo* info))callback;
-(void)checkNetWorkingIsOrNoUse:  (void (^)(  int  StateOrType))callback;
@end

.m文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
#import "APIClient.h"
#import <JSONKit/JSONKit.h>
 
 
#pragma mark -
 
@implementation APIClient
+ (instancetype)sharedClient {
    static APIClient *_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedClient = [[APIClient alloc] initWithBaseURL:[NSURL URLWithString:kAFAppDotNetAPIBaseURLString]];
        _sharedClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
         _sharedClient.requestSerializer.timeoutInterval =20;
         
    });
   
      _sharedClient.responseSerializer.acceptableContentTypes =  [NSSet setWithObjects:@"text/html",@"text/plain",@"charset=UTF-8",@"Content-Type",@"application/json",nil];;
     
    return _sharedClient;
}
 
 
 
#pragma mark -
 
 
/**
 *  网络监测(在什么网络状态)
 *
 *  @callback 1          未知网络
 *  @callback 2        无网络
 *  @callback 3 蜂窝数据网
 *  @callback 4 WiFi网络
 */
 
-(void)checkNetWorkingIsOrNoUse:  (void (^)(  int  StateOrType))callback
{
    // 创建网络监测者
    
    [ [AFNetworkReachabilityManager sharedManager]  setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
      switch (status)
        {
            case AFNetworkReachabilityStatusUnknown:
                callback(1);
                break;
                 
            case AFNetworkReachabilityStatusNotReachable:
                   callback(2);
                break;
                 
            case AFNetworkReachabilityStatusReachableViaWWAN:
                   callback(3);
                 
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                   callback(4);
                break;
                 
            default:
                 
                break;
        }
    }] ;
     
    [[AFNetworkReachabilityManager sharedManager]  startMonitoring];
 
}
 
 
-(void)postUrl:(NSString *)URLString parameters:(id)parameters call:(void (^)( RespInfo* info))callback
{
     
    //首先判断是否有网络
   [self checkNetWorkingIsOrNoUse:^(int StateOrType) {
       if (StateOrType==2) {
            
            
             RespInfo* retobj = [[RespInfo alloc]init];
             retobj.mBSuccess=NO;
             NSString *AlertInfo=@"请检查网络是否畅通。";
             retobj.mMsg=AlertInfo;
             callback(retobj);
        
        
       }
     
       else
       {
            
            
          [self POST:URLString parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
               [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; // 开启状态栏动画
                
                
                
           } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
               NSString *JsonStr=[responseObject JSONString];
               NSDictionary *MyDic=[JsonStr objectFromJSONString];
               //申明block返回的累
               RespInfo* retobj = [[RespInfo alloc]init];
               //判断返回是否成功
               NSString *IsOrNoSuccess=[MyDic objectForKey:@"Success"];
               if ([IsOrNoSuccess intValue]==1) {
                   retobj.mBSuccess=YES;
                   //这里判断返回类型,如果为0不去取mObject的值,否则要取
                   int JudgeInt=[[MyDic objectForKey:@"ControlType"]intValue];
                   if (JudgeInt==0) {//只取列表值
                        
                       NSString *DataListArrayStr=[MyDic objectForKey:@"Rows"];
                       retobj.listData=[DataListArrayStr objectFromJSONString];
                        
                   }
                   else if(JudgeInt==1)//字取附加字典值
                   {
                       NSString *addicationDic=[MyDic objectForKey:@"AddicationDictionary"];
                       retobj.mObjectDictionary=[addicationDic objectFromJSONString];
                   }
                   else if(JudgeInt==2)//两个都取
                   {
                        
                       NSString *DataListArrayStr=[MyDic objectForKey:@"Rows"];
                       retobj.listData=[DataListArrayStr objectFromJSONString];
                        
                       NSString *addicationDic=[MyDic objectForKey:@"AddicationDictionary"];
                       retobj.mObjectDictionary=[addicationDic objectFromJSONString];
                   }
                   //返回的公用提示消息
                   NSString *AlertInfo=[MyDic objectForKey:@"Msg"];
                   retobj.mMsg=AlertInfo;
                    
               }
               else
               {
                    
                   retobj.mBSuccess=NO;
                    
                   NSString *AlertInfo=[MyDic objectForKey:@"Msg"];
                   retobj.mMsg=AlertInfo;
                    
               }
                
               callback(retobj);
                
                
                
                
           } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                
               RespInfo* retobj = [[RespInfo alloc]init];
               retobj.mBSuccess=NO;
                
               retobj.mMsg=error.domain;
                
           }];
 
          
       }
   }];
     
     
}
 
 
-(void)getUrl:(NSString *)URLString parameters:(id)parameters call:(void (^)(  RespInfo* info))callback
{
    //首先判断是否有网络
      [self checkNetWorkingIsOrNoUse:^(int StateOrType) {
        if (StateOrType==2) {
             
             
            RespInfo* retobj = [[RespInfo alloc]init];
            retobj.mBSuccess=NO;
            NSString *AlertInfo=@"请检查网络是否畅通。";
            retobj.mMsg=AlertInfo;
            callback(retobj);
             
             
        }
         
        else
        {
             
             
            [self GET:URLString parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
                [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; // 开启状态栏动画
                 
             } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                  
                     [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
                  
                  
                NSString *JsonStr=[responseObject JSONString];
                NSDictionary *MyDic=[JsonStr objectFromJSONString];
                //申明block返回的累
                RespInfo* retobj = [[RespInfo alloc]init];
                //判断返回是否成功
                NSString *IsOrNoSuccess=[MyDic objectForKey:@"Success"];
                if ([IsOrNoSuccess intValue]==1) {
                    retobj.mBSuccess=YES;
                    //这里判断返回类型,如果为0不去取mObject的值,否则要取
                    int JudgeInt=[[MyDic objectForKey:@"ControlType"]intValue];
                    if (JudgeInt==0) {//只取列表值
                         
                        NSString *DataListArrayStr=[MyDic objectForKey:@"Rows"];
                        retobj.listData=[DataListArrayStr objectFromJSONString];
                         
                    }
                    else if(JudgeInt==1)//字取附加字典值
                    {
                        NSString *addicationDic=[MyDic objectForKey:@"AddicationDictionary"];
                        retobj.mObjectDictionary=[addicationDic objectFromJSONString];
                    }
                    else if(JudgeInt==2)//两个都取
                    {
                         
                        NSString *DataListArrayStr=[MyDic objectForKey:@"Rows"];
                        retobj.listData=[DataListArrayStr objectFromJSONString];
                         
                        NSString *addicationDic=[MyDic objectForKey:@"AddicationDictionary"];
                        retobj.mObjectDictionary=[addicationDic objectFromJSONString];
                    }
                    //返回的公用提示消息
                    NSString *AlertInfo=[MyDic objectForKey:@"Msg"];
                    retobj.mMsg=AlertInfo;
                     
                }
                else
                {
                     
                    retobj.mBSuccess=NO;
                     
                    NSString *AlertInfo=[MyDic objectForKey:@"Msg"];
                    retobj.mMsg=AlertInfo;
                     
                }
                 
                callback(retobj);
              } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                 
                RespInfo* retobj = [[RespInfo alloc]init];
                retobj.mBSuccess=NO;
                 
                retobj.mMsg=error.domain;
                 
            }];
             
             
        }
    }];
 
     
     
}
 
//
  
 
@end

block返回的类

1
2
3
4
5
6
7
8
9
10
11
#pragma mark - RespInfo  外层封装数据
@interface RespInfo : AFDataDefine
@property (nonatomic,strong) NSArray                 *listData;         //列表数据
@property(nonatomic,strong)NSDictionary               *mObjectDictionary;//附带字典
@property (nonatomic,strong) NSString*          mMsg;   //提示消息
@property (nonatomic,assign) BOOL               mBSuccess;    //返回状态,成功失败,判断这个
 
+(RespInfo *)infoWithError:(NSError *)error;
+(RespInfo *)infoWithErrorMessage:(NSString *)errMsg;
 
@end

调用

 1 #import "ViewController.h"
2 #import "APIClient.h"
3
4 @interface ViewController ()
5
6 @end
7
8 @implementation ViewController
9
10 - (void)viewDidLoad {
11 [super viewDidLoad];
12 // Do any additional setup after loading the view, typically from a nib.
13 NSUUID *iD=[[NSUUID alloc]init];
14 NSString *UUIDvALUE=[iD UUIDString];
15
16
17
18
19
20 NSDictionary *Dic=[[NSDictionary alloc]initWithObjectsAndKeys:@"0",@"dataType", nil];
21
22 [[APIClient sharedClient] getUrl:@"/Mobile/Jmfww.asmx/JmfwwCommunity" parameters:Dic call:^(RespInfo *info) {
23 if ([info mBSuccess]) {
24
25
26
27
28 }
29 }];
30
31 }
32
33 - (void)didReceiveMemoryWarning {
34 [super didReceiveMemoryWarning];
35 // Dispose of any resources that can be recreated.
36 }

AFnetworking3.1的基本使用的更多相关文章

  1. IOS 网络浅析-(十一 三方 AFNetworking3.0简介)

    AFNetworking3.0是目前最新的版本,本来打算介绍一下2.6,但是想想2.6名不久矣,就决定不介绍了,有兴趣的小伙伴可以上网查一查.下面我就开始进入正题了. 目前使用人数最多的第三方网络库, ...

  2. iOS 适配https(AFNetworking3.0为例)

    众所周知,苹果有言,从2017年开始,将屏蔽http的资源,强推https楼主正好近日将http转为https,给还没动手的朋友分享一二 1.准备证书 首先找后台要一个证书(SSL证书,一般你跟后台说 ...

  3. AFNetworking3.1.0检查网络状态

    我们知道AFNetworking3.0版本中,弃用了AFHTTPRequestOperationManager.那么进行网络判断的时候就需要使用 AFNetworkReachabilityManage ...

  4. 网络婚礼之AFNetWorking3.0

    目前使用人数最多的第三方网络库,没有之一.从开始的NSURLConnection到现在的NSURLSession,它都一直保持着与苹果的步调一致,而由它也衍生出大量的相关第三方网络功能库,不仅仅因为他 ...

  5. iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载

    官方建议AFN的使用方法   0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目   •2. 或使用Cocopod 导入AFNetworking3.0+   •3.   ...

  6. iOS开发--基于AFNetWorking3.0的图片缓存分析

    图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...

  7. AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示

    对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...

  8. 基于AFNetworking3.0网络封装

    概述 对于开发人员来说,学习网络层知识是必备的,任何一款App的开发,都需要到网络请求接口.很多朋友都还在使用原生的NSURLConnection一行一行地写,代码到处是,这样维护起来更困难了. 对于 ...

  9. iOS_SN_基于AFNetworking3.0网络封装

    转发文章,原地址:http://www.henishuo.com/base-on-afnetworking3-0-wrapper/?utm_source=tuicool&utm_medium= ...

  10. AFNetworking3.0的基本使用方法

    前一段时间在做项目的时候发现AFNetworking3.0已经被大众所接受,所以以后肯定会有很多程序猿朋友必须了解和转移至3.0了,这是我这段时间使用和学习总结出来的一些常用的知识点,希望对大家有用. ...

随机推荐

  1. AlertDialog禁止返回键

    android 如何让dialog不消失,即使是用户按了返回键dialog也不消失 解决的问题:软件提示升级的dialog时候,用户有可能按了返回键,但是现在的需求是用户只能按"确定升级&q ...

  2. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  3. angular $http配置属性

    $http请求的配置对象 $http()接受的配置对象可以包含以下属性: method:http请求方式,可以为GET,DELETE,HEAD,JSONP,POST,PUT url:字符串,请求的目标 ...

  4. parentNode的兼容性问题

    IE9下获取对象层次中的父对象,9以上获取文档层次中的父对象 <table><tr><p><td id="haha">haha< ...

  5. javascript中的链表结构—双向链表

    1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...

  6. 单机多实例Tomcat部署

    单机单用户基础上, 如何运行多个tomcat实例. 首先是tomcat的目录结构 bin    – 包含所有运行tomcat的二进制和脚本文件 lib     – 包含tomcat使用的所有共享库 c ...

  7. 添加JSON Data到已经存在的JSON文件中

    早上在学习<Post model至Web Api创建或是保存数据>http://www.cnblogs.com/insus/p/4343833.html ,如果你第二添加时,json文件得 ...

  8. HTTP04--CDN知识

    一.CDN用途及概念 目的: CDN是内容分布网路(Content Delivery Network)的简称,目的是将网站内容发布到最接近用户的边缘,使用户就近获取内容,提高相应速度. 使用机制: 目 ...

  9. dirtycow漏洞

    dirtycow漏洞,原理还没看懂,找了几个PoC实验了一下. dirtyc0w.c我在CentOS和Kali上都失败了 pokemon.c在CentOS上成功修改了只读文件,不过修改的不是很顺利,结 ...

  10. 绝对干货:供个人开发者赚钱免费使用的一些好的API接口

    不久前,我写了一篇文章,名为<科普技术贴:个人开发者的那些赚钱方式>,讲了一些个人开发者接私活和自己做软件加广告的一些科普知识.可是做软件,需要服务器,需要后台,对于一些小的开发者,想赚点 ...