第一次来简书发文章,目的很简单,一是为了来吐槽下YTKNetwork的坑,二来呢,也希望大家在使用过程中可以有所借鉴,闲话不多说,直接进入正题.
YTKNetwork的安装与集成这里就不用多说,先说全局的请求地址配置在AppDelegate设置
YTKNetworkConfig *config = [YTKNetworkConfig sharedConfig];
config.baseUrl = @"http://v.juhe.cn/";
config.cdnUrl = @"http://fen.bi";
这个设置只适合后台API地址固定的时候使用,如果现在API地址是动态变化的又该怎么设置?我的写法是在YTKNetworkConfig里面覆盖init方法,
self那里,如果有新的API就用APIURL没有就用baseUrl
第二,请求头的设置,一般的通用请求参数(token,设备id)都是放在请求头里面,我是集成YTKRequest类然后重写下面这个方法
参数自己写
第三-重点,为什么说是重点,因为设置完上面几步有可能会请求失败,为什么说有可能,因为YTKNetWork标准的返回的解析格式是json,如果后台没有按照这个标准来做,就会报错,更奇葩的是报错后走了失败的回调,失败的回调里面居然返回了正常的result???正常的返回内容不应该是在成功的回调里面么?一脸蒙蔽....先说我这里是报-1016,后来查阅官方issue请看图,ps:-1016意思就是解析格式错误,需要设置正确的返回格式
2015年的版本了
2015年回答的,我虽然找到了这个类也修改了这个方法,再次运行居然崩溃了!!!!wtf?因为这个方法是在单例方法里面,单例再调单例我反正不懂,反正报错了,再查阅资料发现修改AF源码AFURLResponseSerialization.m文件里面
搜索self.acceptableContentTypes这段代码然后在后面加上@"text/html",@"text/plain"问题解决,再次请求,走了成功的回调.
在这里修改可以解决
ps:官方的回答不一定通用,还有就是使用buildCustomUrlRequest来定制API,但是我们的请求都是封装的通用请求,如果使用buildCustomUrlRequest来定制,会造成N个请求类的封装,不利于后期维护,加入现在有10个接口,你也去写10个自定义还是修改AF源文件?
第四:批量网络请求,如果前面三步没问题,批量请求肯定是成功的,如果前面三步有问题,那么批量请求与依赖请求都会失败,原因是YTKNetwork的机制导致的,YTKNetwork批量请求和依赖请求的原理是一旦有其中一个请求返回失败,所有的请求都会走失败的回调,这也就是为什么前面三步很重要的原因,具体用法见官方demo我这里就不做赘述,如有雷同的地方欢迎大家指出与参考.
网友评论