iOS AFNetworking使用技巧与问题
2016-05-02 15:03
267 查看
1.很多初学者,在每处用到网络请求的地方会直接拿afn实例去请求,从而带来了后续难以维护代码的问题
思考:如果afn不更新了,后续出现重大bug适配问题,从而导致每处用到afn的地方都要修改,请问怎么办?
答案:呵呵,只能一个个修改了!有人会说,怎么可能不更新,很多人用着呢,怕什么。那假设其他第三方也同样出现类型的问题呢?所以是不是应该有方法或某种思想去解决呢?
解决方法:写个网络基类
![](http://upload-images.jianshu.io/upload_images/295346-650fc2f492613368.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/295346-58e7d8649865d143.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
假设业务复杂的话,如登录,涉及到第三方登录之类的,有比较多的网络请求,可以专门抽一个网络请求类要处理:
![](http://upload-images.jianshu.io/upload_images/295346-f30cb693cff5fd61.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/295346-57227b4dc99bd615.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.用到CocoaPods,但更改了afn代码问题
![](http://upload-images.jianshu.io/upload_images/295346-e96edb05432b35df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这是缺少text/html解析格式,请求网络时,只要添加上就行了,很多人在网上找到设置的地方(如下图)。但他忘了,项目用
![](http://upload-images.jianshu.io/upload_images/295346-9cb7800a40827f8e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
解决办法:通过AFHTTPSessionManager实例找到AFHTTPResponseSerializer 对象,然后看有没提供对应的方法或属性可设置该格式。
![](http://upload-images.jianshu.io/upload_images/295346-06c565886384a254.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
像类似的网络请求
3.返回字符串而并非是json或xml格式,怎么解析?
开发中确实是存在奇葩的需求,还有可能返回一堆
用AFHTTPSessionManager,我没找到未解析的字符(知道的朋友可以告诉我,谢谢)。最后还是用了AFHTTPRequestOperationManager
[[AFHTTPSessionManager manager] POST:nil parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { } failure:^(NSURLSessionDataTask *task, NSError *error) { }];
思考:如果afn不更新了,后续出现重大bug适配问题,从而导致每处用到afn的地方都要修改,请问怎么办?
答案:呵呵,只能一个个修改了!有人会说,怎么可能不更新,很多人用着呢,怕什么。那假设其他第三方也同样出现类型的问题呢?所以是不是应该有方法或某种思想去解决呢?
解决方法:写个网络基类
HRHttpBase,提供两个方法:GET 与 POST,外面请求时,直接调用这两个方法,万一afn出了问题,只要修改这两个方法即可,从而减轻后续维护成本!这种做法同样适用于其他的第三方库, 这也是一种开发思想。
HRHttpBase.h
![](http://upload-images.jianshu.io/upload_images/295346-650fc2f492613368.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
HRHttpBase.m
![](http://upload-images.jianshu.io/upload_images/295346-58e7d8649865d143.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
假设业务复杂的话,如登录,涉及到第三方登录之类的,有比较多的网络请求,可以专门抽一个网络请求类要处理:
HRhttpLogin.h
![](http://upload-images.jianshu.io/upload_images/295346-f30cb693cff5fd61.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
HRhttpLogin.m
![](http://upload-images.jianshu.io/upload_images/295346-57227b4dc99bd615.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.用到CocoaPods,但更改了afn代码问题
![](http://upload-images.jianshu.io/upload_images/295346-e96edb05432b35df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这是缺少text/html解析格式,请求网络时,只要添加上就行了,很多人在网上找到设置的地方(如下图)。但他忘了,项目用
CocoaPods管理第三方库的,如果项目上线之前,同事更新了
CocoaPods那么之前写的代码就没了!
![](http://upload-images.jianshu.io/upload_images/295346-9cb7800a40827f8e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
解决办法:通过AFHTTPSessionManager实例找到AFHTTPResponseSerializer 对象,然后看有没提供对应的方法或属性可设置该格式。
![](http://upload-images.jianshu.io/upload_images/295346-06c565886384a254.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
像类似的网络请求
header和
user-agent都应该在自己的代码里设置!
3.返回字符串而并非是json或xml格式,怎么解析?
开发中确实是存在奇葩的需求,还有可能返回一堆
html格式的
String,要截取
Sting里的某个
key。对于处理不了的格式,
afn有可能
error回调。
用AFHTTPSessionManager,我没找到未解析的字符(知道的朋友可以告诉我,谢谢)。最后还是用了AFHTTPRequestOperationManager
operation.responseString即为未格式化的字符
![](http://upload-images.jianshu.io/upload_images/295346-dadcdf9bd6bed9a4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
相关文章推荐
- iOS中的KVC和KVO
- IOS常见的加密方法,常用的MD5和Base64
- IOS常见的加密方法,常用的MD5和Base64
- animation - 7
- iOS程序的生命周期
- iOS开发 ☞ 推送通知(Push Notification)
- ios开发学习笔记--数据持久化之偏好设置(NSUserDefault)
- iOS程序启动内部过程(从点击图标到显示界面)
- IOS 开启关闭右滑手势返回
- IOS注释几种方式
- iOS开发大神必备的Xcode插件(转载)
- [iOS]关于视频方向的若干问题
- iOS中实现返回可拉伸不变形的图片
- ios拼图游戏(七)之组合动画以及捕捉动画结束
- iOS进阶—SB和XIB的前世今生
- IOS总体学习思路(16.5.1)
- iOS 自定义过场动画
- iOS 开发证书的讲解
- iOS之短信,邮件,通信录技术的完美实现
- ios拼图游戏(六)之拼图放大动作以及相应动画