您的位置:首页 > 移动开发 > IOS开发

iOS AFNetworking使用技巧与问题

2016-05-02 15:03 267 查看
1.很多初学者,在每处用到网络请求的地方会直接拿afn实例去请求,从而带来了后续难以维护代码的问题

[[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




HRHttpBase.m




假设业务复杂的话,如登录,涉及到第三方登录之类的,有比较多的网络请求,可以专门抽一个网络请求类要处理:

HRhttpLogin.h




HRhttpLogin.m




2.用到CocoaPods,但更改了afn代码问题



这是缺少text/html解析格式,请求网络时,只要添加上就行了,很多人在网上找到设置的地方(如下图)。但他忘了,项目用
CocoaPods
管理第三方库的,如果项目上线之前,同事更新了
CocoaPods
那么之前写的代码就没了!



解决办法:通过AFHTTPSessionManager实例找到AFHTTPResponseSerializer 对象,然后看有没提供对应的方法或属性可设置该格式。



像类似的网络请求
header
user-agent
都应该在自己的代码里设置!

3.返回字符串而并非是json或xml格式,怎么解析?

开发中确实是存在奇葩的需求,还有可能返回一堆
html
格式的
String
,要截取
Sting
里的某个
key
。对于处理不了的格式,
afn
有可能
error
回调。

用AFHTTPSessionManager,我没找到未解析的字符(知道的朋友可以告诉我,谢谢)。最后还是用了AFHTTPRequestOperationManager

operation.responseString
即为未格式化的字符

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: