为什么以下代码会导致 URLSession
为 data
和 error
返回 nil
?
let task = URLSession.shared.dataTask(with: storeRequest as URLRequest) { data, _, error -> Void in
// there is an error
if let networkError = error {
print("There was a network error")
return
}
// there is no data
guard let safeData = data else {
print("No network error, but no data either")
return
}
...
在运行这段代码时,一位用户点击了 No network error, but no data either
行。
根据 Apple 在 URLSession.dataTask
上的文档:
If the request completes successfully, the data parameter of the completion handler block contains the resource data, and the error parameter is nil. If the request fails, the data parameter is nil and the error parameter contain information about the failure.
我读作:data
或 error
应始终为非零。但这似乎并没有发生在这里。 在什么情况下两者都为零?
(如果有帮助 - 有问题的 URL 是 https://buy.itunes.apple.com/verifyReceipt 的 iTunes 收据验证 API,受影响的用户是 Apple 的审阅者,他们通常不愿意协助调试。这段代码实际上是 SwiftyStoreKit 的一部分,它导致审阅者出现错误 SwiftyStoreKit.ReceiptError error 1
- 但不会出现其他任何人。)
最佳答案
这可能取决于您在 dataTask
的完成处理程序中忽略的 HTTPURLResponse
(documentation 对于 URLSession.dataTask
指示响应虽然是 URLResponse
类型,但实际上是 HTTPURLResponse
类型 - 因此它会有一个 statusCode
属性,有助于理解您请求的结果..
请求很可能已成功,但没有返回任何数据(即 204 No Content 响应或 300 Redirect 响应)。这些不会有数据响应,但也不会有错误响应,因为请求没有失败。
关于ios - URLSession dataTask返回无错误无数据,导致SwiftyStoreKit.ReceiptError错误1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330730/