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

Jos*_*een 1 http objective-c ios

我有崩溃报告是由于没有对dataTask完成块中的数据执行nil-check引起的.修复错误是微不足道的,但在什么情况下甚至会发生?在我的所有测试中,我总是收到一个0字节的NSData,而不是nil - 但显然它是在崩溃日志中发生的.我已经尝试禁用连接(通过飞行模式),反馈无效的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];
Run Code Online (Sandbox Code Playgroud)

Jos*_*een 5

我得到了答案,以及Josh Caswell的建议.

似乎只有iOS9,NSURLSession将为零; 以前的版本只包含零字节NSData.当http请求无法升级到https时,我得到了一个nil数据响应(请参阅上面的上下文评论),但是任何时候应用都无法建立连接 - 这包括与某些运营商打电话/电话,或服务差.这让我相信它不是特定于ATS的情况,而是涉及数据传输层的任何错误似乎都会导致数据为零.

因此,简而言之,重要的是要知道数据仅从iOS9开始为零.