V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
pikoqian98
V2EX  ›  问与答

使用 AFNetworking 框架遇到了一个诡异问题,模拟器正常,真机完全不执行

  •  
  •   pikoqian98 · 2020-03-23 01:43:23 +08:00 · 1316 次点击
    这是一个创建于 1714 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天写个小 demo,在模拟器上( iPhoneX )调试请求 ok,但是在真机上死活不执行网络请求的代码,直接跳过,控制台也不报错,打断点仔细看了一下发现 AFHTTPSessionManager 没有被实例化( AFHTTPSessionManager* manager = [AFHTTPSessionManager manager]是成功执行的,但是没有生成对象),这是什么操作,求解答(第一次发帖,不知道在 V2EX 上怎么插图)

    4 条回复    2020-03-23 22:24:24 +08:00
    dorentus
        1
    dorentus  
       2020-03-23 11:44:20 +08:00
    原则上讲,你需要提供:

    - AFNetworking 的版本
    - 你的项目的 Deployment target 、真机和模拟器的系统版本
    - 一个可以重现问题的最小版本的示例代码
    - 其他细节,如模拟器上如何调试请求 OK 的;真机上如何调试发现 AFHTTPSessionManager 没有实例化的

    ----

    不过我猜,可能是你创建的 AFHTTPSessionManager 没有自己 retain,在请求完成、触发回调之前被 release 了。
    pikoqian98
        2
    pikoqian98  
    OP
       2020-03-23 14:23:15 +08:00
    你好,Xcode 版本是 11.3.1 (11C504),真机 iOS 版本是 13.3.1,模拟器版本是 13.3,AFNetworking 版本是 3.2.1,deploymentTareget 为 9.0
    测试代码:
    AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
    NSLog(@"manager------:%p",manager);
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:@"http://www.baidu.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
    NSLog(@"res%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    }];
    真机上直接打印地址为 0x0,但是模拟器打印内存地址是存在的
    dorentus
        3
    dorentus  
       2020-03-23 16:26:29 +08:00
    我上面那个猜测是错的。

    AFHTTPSessionManager 创建的 session 的 delegate 就是 manager 自己,而 session retain 了这个 delegate 。

    ----

    我本地试了一下上面的代码,没能重现🤦🏻

    ----

    那么不管上面打印出来的 manager 的地址的问题,先排除一下:

    1. 把地址改成 https 的,排除 ATS 的影响
    2. 在 failure block 里面也加上 NSLog,看看是不是报错了
    pikoqian98
        4
    pikoqian98  
    OP
       2020-03-23 22:24:24 +08:00
    @dorentus
    感谢您的回复,这些原因之前也排查了一下,似乎确实是没有生成 manager 这个实例,不清楚是为什么,我在模拟器上测试网络请求也是正常执行的。
    刚刚把 cocoapods 导入的 AFNetworking 移除,更换成手动导入项目里,真机调试上正常运行了,我 cocoapods 安装应该是正常的,可能是 AFNetworking.framework 导进 build phases 的过程我有不对的地方。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2699 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:28 · PVG 15:28 · LAX 23:28 · JFK 02:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.