【问题标题】:URLSession dataTask returns with no error and no data, causing SwiftyStoreKit.ReceiptError error 1URLSession dataTask 无错误无数据返回,导致 SwiftyStoreKit.ReceiptError 错误1
【发布时间】:2019-12-11 07:58:51
【问题描述】:

为什么下面的代码会导致URLSessiondataerror 返回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 上的文档:

如果请求成功完成,则数据参数 完成处理程序块包含资源数据和错误 参数为零。如果请求失败,则 data 参数为 nil 并且 error 参数包含有关失败的信息。

我将其解读为:dataerror 应始终为非零。但这似乎并没有在这里发生。 在什么情况下两者都为零?

(如果有帮助 - 有问题的 URL 是https://buy.itunes.apple.com/verifyReceipt 的 iTunes 收据验证 API,受影响的用户是 Apple 的审阅者,他们通常不愿意协助调试。这段代码实际上是 SwiftyStoreKit 的一部分,它导致审阅者出现错误SwiftyStoreKit.ReceiptError error 1 - 但绝不会导致其他任何人出现错误。)

【问题讨论】:

    标签: ios swift nsurlsession urlsession swiftystorekit


    【解决方案1】:

    这可能取决于您在dataTask 的完成处理程序中忽略的HTTPURLResponsedocumentation for URLSession.dataTask 表示响应虽然属于URLResponse 类型,但实际上属于@ 类型987654328@ - 所以它会有一个statusCode 属性,这将有助于理解您的请求结果..

    请求很可能已经成功,但没有返回任何数据(即204 No Content 响应或300 Redirect 响应)。这些不会有数据响应,但也不会有错误响应,因为请求没有失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多