zoukankan      html  css  js  c++  java
  • Cocoapods 集成AFNetworking从2.0版本升级到3.0版本的问题

    问题描述:
    1.AFNetworking 2.0版本使用的网络请求是AFHttpOpretionManager方式,较慢;
    2.AFNetworking 3.0版本已完全废弃了上一种请求方式,改为全面只是iOS 9.0HTTPS的网络请求方式,更快更安全;
    3.项目中使用cocoapods管理第三方插件,报错AFNetworking也不例外,但是使用pod升级时会遇到如下问题:
         1.原有的网络请求已废弃,要使用最新方法
         - (nullableNSURLSessionDataTask *)GET:(NSString *)URLString
                                parameters:(nullable id)parameters
                                  progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress
                                   success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
                                   failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;
         此处怕误导,就不黏贴老方法了。相比老方法,新方法多了一个progress block回调,应用上应该是下载进度时使用,具体不详,使用时一般设为nill即可;
         2.主要问题不是方法的改变,是网络请求失败,报错信息如下:
         
              1.如果简单的上网络搜索该词条,会出现答案关于引用计数方面的问题,说访问的对象被提前释放,当你去访问时实质上是没有该对象的,报了空指针异常错误;
              2.但问题并不是出在于此,因为网络请求失败,但错误的信息引导你以为是网络请求时传入参数为空引起,这是个误导,检验很简单,你可以屏蔽此网络请求,试着走其       他请求,看是否报有同一个错误,如果保守将可以尝试不同请求,如:get请求、post请求、delect请求、put请求等等;结果无一例外全部报一个错,那么你应该怀疑,一个地方有空值可以理解,处处有空值,是不是你网络请求有问题呢?
     
    问题解决:
              1.为了解决上面问题,我特别小心,看是否是之前的那个坑的复制,比如是不是有缓存,下载到的不是最新版本,我开始重复几遍操作,为了避免这个问题,我也是蛮拼的,首先使用常规删除,在Podfile中删除gem语句 pod ‘AFNetworking’,执行pod install语句,提示成功移除该插件;检查项目中,确实没有AFNetworking相关文件了。然后执行 vim Podfile,重新添加 pod ‘AFNetworking’语句,执行pod install安装插件。结果不可用,我开始清除缓存,pod cache,然后使用pod update更新插件。简单来讲,pod remove file、手动删除、pod cache、pod update、从正常项目中复制插件进项目、xcode情理缓存,以上几种方法,按排列组合讲,我使用了个遍,浑身解数解决cocoapods与插件升级的问题,但无一例外,结果都是不可用的。特别是pod cache方法,重要的方法运行三遍!
              2.最后,我实在没法了,cocoapods官网也找不到,AFNetworking还是个外国维护插件,所有的权威工程师一个都联系不上,不过我仍然没有放弃。
              3.换了一种搜问题的词条,使用“afnetworking 2.0升级到3.0 cocoa pods”,搜索以后,有一个答案让我看一下是不是pod本地版本与远端版本不同步问题,其实也是我之前极力避免的陨石坑级别问题,但是每次我查看插件版本的时候都是要运行一遍 pod install方法,这种方法是有危险,因为有些没有限定版本的第三方总是同步最新版本,如果你没有去相应官网查看是否有新的更新,你就果断使用pod install就同步最新版本,一旦报错,你根本不知道是哪个插件出的问题。这之前我并不知道在哪查看已安装的插件版本信息,通过这次搜索,了解到同级别有个Podfile.lock文件,这个文件就是保存本地版本信息的。我打开了他查看了一下,所有AFNetworking相关插件,全为最新版本3.1.0。
              4.我也是不信才写的这篇文章,我打开文档时候,提示我文档不可打开,我就强制使用了文本编辑器打开了,结果呢,打开工程运行的时候,奇迹发生了,可以运行了;我瞬间以为是点错了,因为我有企业版和测试两个版本,仔细看是xcode运行的项目,我再运行一遍,还是可以运行!
              5.这种可怕的问题,比我没成功更可怕,我检查是不是网络访问的单例是老版本的,仔细检查发现是最新的因为progress block方法的nill很明显。我就纳闷了,我啥也没动啊!我再检查xcode中pod文件,结果有变化,AFNetwork文件夹中只有两个子文件夹了,所有文件都在这两个文件夹下,按理说父文件夹旗下是有6个文件夹加上一个暴露在外的头文件的。
              6.我想啊,反正我都没正常运行一天了,我还害怕再次不运行吗。我手动删除了父文件夹AFNetwork,然后执行pod install命令。立马就安装好最新插件,转眼一看父文件夹回来了,旗下也变得正常了6+1的部署方式,再次运行,成功!至此,问题解决。
     
    问题心得:
    1.问题心得其实是很凄凉、很荒凉,惊吓大于惊喜的。因为我不知道是哪里接触不良,现在又能用了;
    2.如果以后再遇到此类问题,我除了多点击一下Podfile.lock文件,我别的一点抓手都没有。
  • 相关阅读:
    18个功能强大的HTML5 和JavaScript游戏引擎库
    10 个超棒的 jQuery 视频插件
    HTML5播放视频音频
    CSS代码重构与优化之路
    推荐10款web前端的 HTML5 开发框架和开发工具
    JS中日期相关函数
    技术笔记1:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password)
    图解HTTP阅读笔记(1)-网络基础TCP/IP
    框架和设计模式的区别
    SSH与MVC
  • 原文地址:https://www.cnblogs.com/guoqiangx-5/p/5500988.html
Copyright © 2011-2022 走看看