iOS Framework

AFNetworking使用时遇到的那些问题

2016-07-18  本文已影响299人  RedQ

搞iOS开发应该都知道AFNetworking这个优雅的网络请求库,基本上我们搞app基本上要跟网络打交道,基本上我们也会用到AFNetworking这个网络库,如果你使用的是Swift语言开发的那你使用的也是同一个作者开发的另一个网络请求库Alamofire,AFNetwork 的前缀 AF 是 Alamofire 的缩写,因此这个新的库名称其实是根据 Swift 的约定来进行命名的。接下来我会把我在开发中使用AFN遇到的一些问题列出来。


使用AFN遇到的那些问题

1、处理返回数据时出现Error Domain=NSCocoaErrorDomain Code=3840 错误,报错:
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unescaped control character around character 2884.) UserInfo=0x79fa60b0 {NSDebugDescription=Unescaped control character around character 2884.}
原因在于出现特殊字符是AFNetworking无法解析的,会直接报错,那么当你在发post请求时,返回结果会直接进如fail代码块,其实在fail中用operation的nsstring可以直接输出接收到的数据,是string形,可以清楚的看到服务器端数据有哪些含有特殊字符,但是有一些字符是不好看到的,比如“TAB”(制表)键打出的那种四个空格,项目中用户有时候很常用到tab键,最好的方法是在AFNetworking源码中添加字符过滤功能
处理办法:找到AFNetworking包中AFURLResponseSerialization.m文件,大概在第256行的 if (responseString && ![responseStringisEqualToString:@" "])(此时已将data转化为responseString形)条件下面添加如下过滤方法:

NSCharacterSet *controlChars = [NSCharacterSet controlCharacterSet];
     NSRange range = [responseString rangeOfCharacterFromSet:controlChars];
     if (range.location != NSNotFound)
        {
          NSMutableString *mutable = [NSMutableString stringWithString:responseString];
           while (range.location != NSNotFound)
                 {
                     [mutable deleteCharactersInRange:range];
                     range = [mutable rangeOfCharacterFromSet:controlChars];
                  }
             responseString = mutable;
         } ```

OK,再试一下,应该不会在报错了。
参考网址[链接](http://blog.csdn.net/atomgirl/article/details/43154483)
****
2、AFNetworking请求数据,我们会对AFN进行封装再使用或者直接使用,当我们使用时  


3、AFNetWorking 3.0在CocoaPods上的坑,当我们使用AFN的3.0的版本的时候,我们使用podfile的时候会出现问题,使用pod search 方法你会发现AFN在CocoaPods没有3.0版本,可能原因是AFN更新太快CocoaPods没有同步跟新过来,具体方法和原因我是参考这篇文章解决问题的链接


4、使用AFN中的AFHTTPSessionManager对象调用请求GET方法后,一直没有被释放,因为它一直强引用着session即NSURLSession对象,而session一直被session的delegate强引用着,这样就造成了循环引用导致内存泄漏。当我对AFN封装使用,检测APP发现有内存泄漏问题,这个问题很早以前就有人在Github上提过了,@mattt当时也回复了这里.这个问题你也可以在stackoverflow搜索基本可以解决你的问题,我查看的网址是链接,作者还在最后给出了他封装的AFN3.0库让你可以安全的使用具体详情可以去查看上面我给出的链接。

最后

本人水平有限如果哪里有地方写错或者写的不好,还望大家及时指出我会尽快修改,以免误导他人,如果上面哪个有更好的解决方法还望无私分享,大家沟通交流一起学习。

上一篇下一篇

猜你喜欢

热点阅读