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

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

.h文件

#import <Foundation/Foundation.h>
#import "AFDataDefine.h"
#import <AFNetworking/AFNetworking.h>
static NSString* const 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文件

#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返回的类

#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

调用

 #import "ViewController.h"
#import "APIClient.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSUUID *iD=[[NSUUID alloc]init];
NSString *UUIDvALUE=[iD UUIDString]; NSDictionary *Dic=[[NSDictionary alloc]initWithObjectsAndKeys:@"",@"dataType", nil]; [[APIClient sharedClient] getUrl:@"/Mobile/Jmfww.asmx/JmfwwCommunity" parameters:Dic call:^(RespInfo *info) {
if ([info mBSuccess]) { }
}]; } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。

 

AFNetworking 3.1的更多相关文章

  1. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  2. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  3. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

  4. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  5. 【原】AFNetworking源码阅读(二)

    [原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...

  6. 【原】AFNetworking源码阅读(一)

    [原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...

  7. AFNetworking 3.0 源码解读 总结(干货)(下)

    承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...

  8. AFNetworking 3.0 源码解读 总结(干货)(上)

    养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...

  9. AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking

    AFNetworking的源码解读马上就结束了,这一篇应该算是倒数第二篇,下一篇会是对AFNetworking中的技术点进行总结. 前言 上一篇我们总结了 UIActivityIndicatorVie ...

  10. AFNetworking 3.0 源码解读(十)之 UIActivityIndicatorView/UIRefreshControl/UIImageView + AFNetworking

    我们应该看到过很多类似这样的例子:某个控件拥有加载网络图片的能力.但这究竟是怎么做到的呢?看完这篇文章就明白了. 前言 这篇我们会介绍 AFNetworking 中的3个UIKit中的分类.UIAct ...

随机推荐

  1. Atitit图像识别的常用特征大总结attilax大总结

    Atitit图像识别的常用特征大总结attilax大总结 1.1. 常用的图像特征有颜色特征.纹理特征.形状特征.空间关系特征. 1 1.2. HOG特征:方向梯度直方图(Histogram of O ...

  2. paip.java gui swt/jface 最佳实践

    paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...

  3. jQuery监听文本框值改变触发事件(propertychange)

    完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  4. KnockoutJS 3.X API 第三章 计算监控属性(4)Pure computed observables

    Pure computed observables Pure computed observables是KO在3.2.0版本中推出的.她相对于之前的ComputedObservables有很多改进: ...

  5. Android入门(二)Activity-Toast、Intent

    原文链接:http://www.orlion.ga/427/ 一.隐藏activity的标题 在activity的java代码的onCreate()方法中入requestWindowFeature(W ...

  6. javascript类型系统——布尔Boolean类型

    × 目录 [1]定义 [2]应用场景 [3]转为布尔[4]实例方法 前面的话 布尔值Boolean类型可能是三种包装对象Number.String和Boolean中最简单的一种.Number和Stri ...

  7. javascript类型系统——Math对象

    × 目录 [1]常量 [2]函数 前面的话 javascript使用算术运算符实现基本的算术运算,如果要实现更加复杂的算术运算,需要通过Math对象定义的常量和函数来实现.和其他对象不同,Math只是 ...

  8. javase基础复习攻略《九》

    本篇将为大家总结JAVA中的线程机制,谈到线程,大家一定会问线程和进程有什么区别?刚接触进程时我也有这样的疑问,今天就为大家简单介绍一下进程和线程.进程(Process)是计算机中的程序关于某数据集合 ...

  9. php基础教程-变量

    变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.变量可以通过变量名访问.在指令式语言中,变量通常是可变的:但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable) ...

  10. .NET 三层架构的简单规划

    今天心血来潮简单看了下petshop4.0的源代码,他就是用三层架构来实现的.现在简单的做下总结. 首先我们先看下petshop的三层架构. 1 WEB 表示层 2 Model 业务实体 3 BLL ...