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

时间:2015-10-07 18:48:23

标签: ios objective-c http

我的崩溃报告是由于未对dataTask完成块中的数据执行nil检查而导致的。修复错误是微不足道的,但在什么情况下甚至会发生?在我的所有测试中,我总是收到一个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];

1 个答案:

答案 0 :(得分:5)

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

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

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