HTTPPost/AFNetWorking/JSONModel/NSPredicate

一、HTTPPost================================================

1. POST方式发送请求

HTTP协议下默认数据发送请求方法是GET方式,若需要使用POST方法,则需要对发送的请求也就是request对象,进行属性设置。

步骤如下:

> 要发送的请求对象,需要使用可变请求对象

[[NSMutableURLRequest alloc] initWithURL:]

此时创建的请求对象,其相关属性是可以进行设置的,通过NSURLRequest创建的请求对象其属性一般是只读的。

> 设置请求方法

mutableRequest.HTTPMethod = @“POST”;

// 设置请求头的信息 (不是必须设置)

[mutableRequest setValue: forHTTPHeaderField:]

> 将要发送的数据字符串转换成NSData

如: username=abc&password=123

[str dataUsingEncoding:NSUTF8StringEncoding]

> 设置请求体

mutableRequest.HTTPBody = data

> 发送数据...

二、AFNetWorking==============================================

1. 官方地址:https://github.com/AFNetworking/AFNetworking

此库是对NSURLConnection 和 NSURLSession的封装,目前最新版为3.0. 因NSURLConnection从iOS9开始被弃用,3.0的版本已将对NSURLConnection的相关支持类移除,3.0以下的版本支持NSURLConnection的封装。因NSURLSession从iOS7就存在,基于目前app的开发,可以使用AFNetWorking的最新版,若确实需要兼容iOS7以前的,则需要下载AFNetworking3.0之前的版本。

除了对NSURLConnection 和 NSURLSession的封装,AFNetworking还封装了部分数据解析,网络状态的判断,多线程等方面的处理。此库比较优秀,bug极少,是目前通用的第三方网络访问库。之前也有使用ASIHTTPRequest库,但因其暂停维护,已逐渐转向AFNetworking。

2. 使用AFNetworking

- 安装

简单方式:直接将 该库下的目录AFNetworking目录拖曳到自己的工程目录下,确认copy items.

- GET/POST发送数据

> 创建会话管理器 (3.0以下使用AFHTTPRequestOperationManager 创建http请求管理器)

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

> 设置响应解析器(三选一,根据实际返回数据决定)

// 二进制解析器 (推荐使用)

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

// json 解析器 将json格式的数据直接转换成oc中的对象,如字典类型的

manager.responseSerializer = [AFJSONResponseSerializer serializer]

// xml 解析器 将xml 格式的数据直接转换成oc中的对象,如字典类型的

manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

> 发送GET/POST请求

[manager GET:@“url字符串” parameters:<传递的参数,一般为字典类型,也可在url串中包含> progress:<#^(NSProgress * _Nonnull downloadProgress)downloadProgress#> success:<#^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)success#> failure:<#^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)failure#>]

/* progress 请求后数据下载进度block 设置为nil,若有文件下载可在此处理;

success 请求成功获得响应block ,在此获取数据解析显示;

failure: 请求失败block */

[manager POST:<#(nonnull NSString *)#> parameters:<#(nullable id)#> progress:<#^(NSProgress * _Nonnull uploadProgress)uploadProgress#> success:<#^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)success#> failure:<#^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)failure#>]

/* 参数与get 方式基本类似, progress: 提交请求后,数据上传进度,若有文件上传可在此处理; */

3. 网络状态监测

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

// status 值:

//        AFNetworkReachabilityStatusUnknown          = -1,  // 未知

//        AFNetworkReachabilityStatusNotReachable     = 0,  // 无网络

//        AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 运营商流量,2g,3g,4g等

//        AFNetworkReachabilityStatusReachableViaWiFi = 2,      // wifi

NSLog(@"%ld",(long)status);

}];

// ***开启监测

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

基于苹果官方 Reachability 。官方有示例代码。

三、JSONModel===================================================================

JSON 在线校验:http://www.bejson.com

0. json解析

// iOS SDK

-[NSJSONSerialization]

// 第三方json解析

- [JSONKit](https://github.com/johnezang/JSONKit) // 效率接近NSJSONSerialization

- [TouchJSON (from touchcode)](http://code.google.com/p/touchcode/)

- [YAJL (objective-C bindings)](http://github.com/gabriel/yajl-objc)

- [SBJSON (json-framework)](http://code.google.com/p/json-framework/)

1. 官方地址:https://github.com/icanzilb/JSONModel

数据模型的第三方库,可快速创建json数据模型,其实现原理是利用KVC(键值编码),是一个抽象类,不能直接使用,需要继承其来使用子类。

2. 使用

- 安装

将库的工程目录下JSONModel 拖曳到自己的工程中,确认copy items选中。再将其中的info.plist文件删除。

- 使用方法

> 定义一个数据模型类(model),先import JSONModel.h,使该类继承自JSONModel

> 与之前相同,为该model定义属性

> 将json 转换为字典类型后,使用model的初始化方法 initWithDictionary:将字典类型的数据转换成model

> 若model里的属性与json中的字段名字不一致,但仍然想让其关联则需要重写model 父类中的方法 :

+(JSONKeyMapper *)keyMapper {

return [[JSONKeyMapper alloc] initWithDictionary:@{@"author":@"Author"}];

}

> 若服务端下发的数据中某一字段不一定会返回(缺失字断),则需要在对应的model里该字段的类型后添加Optional : 例如

@property (nonatomic,strong) NSString<Optional> *Author

> 其他:model 可转换成字典,json数据

[model toDictionary], [model toJSONData]

四、NSPredicate==============================================

1. 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。通常被用来检索、替换那些符合某个模式的文本。

2. iOS中正则使用

有三种(NSPredicate, rangeOfString:option:, NSRegularExpression),主要使用NSPredicate(谓词)匹配

例如 检测email是否合法:

————————————————————————————

NSString *email = @“[email protected]”;

NSString *regex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

BOOL isValid = [predicate evaluateWithObject:email];

————————————————————————————

3. 常用正则表达式:

匹配中文字符的正则表达式: [u4e00-u9fa5]

  评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

  匹配双字节字符(包括汉字在内):[^x00-xff]

  评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

  匹配空白行的正则表达式:ns*r

  评注:可以用来删除空白行

  匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />

  评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

  匹配首尾空白字符的正则表达式:^s*|s*$

  评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

  匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

  评注:表单验证时很实用

  匹配网址URL的正则表达式:[a-zA-z]+://[^s]*

  评注:网上流传的版本功能很有限,上面这个基本可以满足需求

  匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

  评注:表单验证时很实用

  匹配国内电话号码:d{3}-d{8}|d{4}-d{7}

  评注:匹配形式如 0511-4405222 或 021-87888822

  匹配腾讯QQ号:[1-9][0-9]{4,}

  评注:腾讯QQ号从10000开始

  匹配中国邮政编码:[1-9]d{5}(?!d)

  评注:中国邮政编码为6位数字

  匹配身份证:d{15}|d{18}

  评注:中国的身份证为15位或18位

  匹配ip地址:d+.d+.d+.d+

  评注:提取ip地址时有用

^[1-9]d*$    //匹配正整数

  ^-[1-9]d*$   //匹配负整数

  ^-?[1-9]d*$   //匹配整数

  ^[1-9]d*|0$  //匹配非负整数(正整数 + 0)

  ^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)

  ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数

  ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数

  ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数

  ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)

  ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)

^[A-Za-z]+$  //匹配由26个英文字母组成的字符串

  ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串

  ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串

  ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串

  ^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

只能输入数字:“^[0-9]*$”

  只能输入n位的数字:“^d{n}$”

  只能输入至少n位数字:“^d{n,}$”

  只能输入m-n位的数字:“^d{m,n}$”

  只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”

  只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”

  只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”

  只能输入非零的正整数:“^+?[1-9][0-9]*$”

  只能输入非零的负整数:“^-[1-9][0-9]*$”

  只能输入长度为3的字符:“^.{3}$”

  只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”

  只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”

  只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”

  只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”

  只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”

  验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间,

  只能包含字符、数字和下划线。

  验证是否含有^%&‘‘,;=?$"等字符:“[^%&‘‘,;=?$x22]+”

  只能输入汉字:“^[u4e00-u9fa5],{0,}$”

  验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”

  验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”

  验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$”

  正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,

  “XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。

  验证身份证号(15位或18位数字):“^d{15}|d{}18$”

  验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”

  验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”

  正确格式为:“01”“09”和“1”“31”。

  匹配中文字符的正则表达式: [u4e00-u9fa5]

  匹配双字节字符(包括汉字在内):[^x00-xff]

  匹配空行的正则表达式:n[s| ]*r

  匹配HTML标记的正则表达式:/<(.*)>.*|<(.*) />/

  匹配首尾空格的正则表达式:(^s*)|(s*$)

  匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

  匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

时间: 2024-12-21 14:18:02

HTTPPost/AFNetWorking/JSONModel/NSPredicate的相关文章

JsonModel&amp;AFNetWorking

// HttpManager.h // JsonModel&AFNetWorking // // Created by qianfeng on 15/7/21. // Copyright (c) 2015年 张国锋. All rights reserved. // #import <Foundation/Foundation.h> #import "AFNetworking.h" typedef void (^sucessBlock)(AFHTTPRequestOp

AFNetworking使用总结

AFNetworking使用总结 关于AFNetworking使用总结 以及一些错误的解决办法. AD:WOT2015 互联网运维与开发者大会 热销抢票 分享类型:游戏开发相关 1 将AFNetWorking文件夹导入项目 2 添加类库 Security.framework.MobileCoreServices.framework.SystemConfiguration.framework 3 在使用的地方 #import "AFNetworking.h" 解决编译时警告: Prefi

iOS网络开发-AFNetworking请求asp.net WebService

看到园子有位朋友需要使用AFN框架请求 WebService,所以就整理了一下,demo下载链接在底部 编写WebService可以看这篇博客 http://www.cnblogs.com/linmingjun/p/4606451.html //使用AFN请问无参方法 //使用AFN无参 -(void)AfnDemo { NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://115.2

CocoaPods报错:The dependency `AFNetworking ` is not used in any concrete target

最近更新了下cocoapods,今天再pod update  就遇到这个错误: 大体意思就是说,库没有用到指定的target. 找了下资料,发现是新版CocoaPods在 Podfile里使用时,必须指定target: 比如: platform:ios,'7.0' target 'TestSwift' do pod 'AFNetworking' pod 'SDWebImage' pod 'JSONModel' pod 'MJRefresh' pod 'SDCycleScrollView','~>

AFNetworking 2.0 Tutorial

Update 1/18/2014: Fully updated for iOS 7 and AFNetworking 2.0 (original post by Scott Sherwood, update by Joshua Greene). In iOS 7, Apple introduced NSURLSession as the new, preferred method of networking (as opposed to the older NSURLConnection API

ios AFNetworking 3.0 原码阅读分析 (一)(AFURLRequestSerialization)

本文主要内容是讲AFNetworking中的AFURLRequestSerialization.它主要的作用是在我们要发送一个网络请求的时候帮助我们创NSMutableURLRequest并封装好所需要的参数到NSMutableURLRequest中.那它内部做了些什么,提供了什么功能,使得我们进行网络请求时候变得如此方便.简单.好像我们什么都不用管就能建立一个正确的请求体NSURLRequest.接下来就会一步步揭开它神秘的面纱. 概览 首先看一下在AFURLRequestSerializat

AFNetworking 3.0x版本最新特性

AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持.如果你的项目以前使用过这些API,建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本.本指南将引导您完成这个过程. 本指南是为了引导使用AFNetworking 2.x升级到最新的版本API,以达到过渡的目的,并且解释了新增和更改的设计结构. 新设备要求: iO

AFNetworking发送和接收字符串时报3840错误的解决办法

AFNetworking框架默认请求类型和响应类型都是JSON格式的,在特殊情况下,我们使用字符串形式的时候,就会报3840错误,如何解决呢? 设置请求管理者: // 因为传递过去和接收回来的数据都不是json类型的,所以在这里要设置为AFHTTPRequestSerializer和AFHTTPResponseSerializer mgr.requestSerializer = [AFHTTPRequestSerializer serializer];// 请求 mgr.responseSeri

iOS开发 之 AFNetworking的基本使用

首先下载AFNetworking 然后在需要使用的类中,导入如下2个头文件: #import "AFNetworking.h"//主要用于网络请求方法 #import "UIKit+AFNetworking.h"//里面有异步加载图片的方法 GET请求网络数据方式: -(void)obtainData {     // 启动系统风火轮     [UIApplication sharedApplication].networkActivityIndicatorVisi