Ios 在什么情况下,NSURLSession的数据返回nil?

Ios 在什么情况下,NSURLSession的数据返回nil?,ios,objective-c,http,Ios,Objective C,Http,我有一些崩溃报告,它们是由于没有对dataTask完成块中的数据执行零检查而导致的。修复错误是微不足道的,但是,在什么情况下会发生这种情况呢?在我所有的测试中,我总是收到一个0字节的NSData,而不是零字节的NSData——但很明显,如果它在崩溃日志中,就会发生这种情况。我尝试过禁用连接(通过飞机模式),反馈无效的HTTP响应,超时HTTP响应,在连接仍在传输时最小化应用程序,等等。。。我已经做了所有我能想到的事情,但从来没有让数据为零——只有0字节。我在想什么 NSURLSession *s

我有一些崩溃报告,它们是由于没有对dataTask完成块中的数据执行零检查而导致的。修复错误是微不足道的,但是,在什么情况下会发生这种情况呢?在我所有的测试中,我总是收到一个0字节的NSData,而不是零字节的NSData——但很明显,如果它在崩溃日志中,就会发生这种情况。我尝试过禁用连接(通过飞机模式),反馈无效的HTTP响应,超时HTTP响应,在连接仍在传输时最小化应用程序,等等。。。我已经做了所有我能想到的事情,但从来没有让数据为零——只有0字节。我在想什么

NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    // What kind of server-response/connection-scenarios would make data be nil...? (not 0 bytes)
}];
[task resume];

根据乔希·卡斯韦尔的建议,我想出了一个答案

似乎只有iOS9NSURLSession将为零;以前的版本只包含一个零字节的NSData。当http请求无法升级到https(请参阅上面的注释了解上下文)时,我得到了一个无数据响应,但当应用程序无法建立连接时,也会得到一个无数据响应——这包括与一些运营商/电话通话,或服务差。这使我相信这不是一个ATS特定的案例,但是,任何涉及数据传输层的错误似乎都会导致数据为零


因此,简而言之,需要知道的重要一点是,从iOS9开始,数据才开始为零。

错误说明了什么<代码>如果(!data){NSLog(@“%@”,error);}就是这样:我试图找到生成零数据的场景——所以我不知道/没有NSError。只有生产用户遇到了这种情况,而我得到的只是stacktrace。(“致命异常:NSInvalidArgumentException数据参数为nil”)您知道吗?iOS版本可能是一个因素吗?这是一个好主意——特别是因为所有的报告都来自iOS9。我将把它指向一个不支持https的http服务器,看看是否可以得到一个nil响应!谢谢你的主意。“我过几天就回来报到。”乔什·卡斯韦尔:是的!你,先生,洛克。这正是情况。多谢各位。如果你把它作为这个问题的答案(而不是评论),我会接受它。这对我帮助很大!“nil”响应导致我的NSURLSession在从睡眠模式(解锁)返回时崩溃。通过在检查“nil”并创建新会话后调用return,我能够修复它√ 干得好是的。因此,我对iOS 8和更少的设备产生了问题。有趣的是,文档中明确指出,如果请求失败,数据将为
nil