网站开发需要的技能,网站页面组成,网站建设与管理实践,wordpress 后台上传一、HTTPPost 1. POST方式发送请求 HTTP协议下默认数据发送请求方法是GET方式#xff0c;若需要使用POST方法#xff0c;则需要对发送的请求也就是request对象#xff0c;进行属性设置。 步骤如下#xff1a; 要发送的请求对象#xff0c;需要使用可变请求对象 [[NSM… 一、HTTPPost 1. POST方式发送请求 HTTP协议下默认数据发送请求方法是GET方式若需要使用POST方法则需要对发送的请求也就是request对象进行属性设置。 步骤如下 要发送的请求对象需要使用可变请求对象 [[NSMutableURLRequest alloc] initWithURL:] 此时创建的请求对象其相关属性是可以进行设置的通过NSURLRequest创建的请求对象其属性一般是只读的。 设置请求方法 mutableRequest.HTTPMethod “POST”; // 设置请求头的信息 不是必须设置 [mutableRequest setValue: forHTTPHeaderField:] 将要发送的数据字符串转换成NSData 如 usernameabcpassword123 [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. GETPOST发送数据 创建会话管理器 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) NSStringOptional *Author 其他model 可转换成字典json数据 [model toDictionary], [model toJSONData] 四、NSPredicate 1. 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。通常被用来检索、替换那些符合某个模式的文本。 2. iOS中正则使用 有三种NSPredicate, rangeOfString:option:, NSRegularExpression主要使用NSPredicate(谓词)匹配 例如 检测email是否合法 ———————————————————————————— NSString email “cc163.com” NSString *regex [A-Z0-9a-z._%-][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] 评注可以用来计算字符串的长度一个双字节字符长度计2ASCII字符计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- ./?%]*)? 转载于:https://www.cnblogs.com/GJ-ios/p/5701964.html