【问题标题】:NSURLSessionResponseCancel produces error?NSURLSessionResponseCancel 产生错误?
【发布时间】:2016-08-10 06:32:49
【问题描述】:

我使用NSURLConnectionobject 并有时调用它的方法cancel

现在我应该替换 NSURLConnection -> NSURLSessionNSURLSession 也适用于具有 cancel 方法的任务。

问题是-[NSURLConnection cancel] 只是停止处理请求,但如果我使用-[NSURLSessionTask cancel] 它会产生“取消错误”。那么如何正确区分cancel是手动调用还是发生了真正的错误呢?

【问题讨论】:

  • 这个错误的具体内容是什么?我假设它是一个NSError 对象?如果是这样,code 的值是多少?
  • po 错误给出Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey=..., NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey=...} "..." - 只是链接。并且文档中没有信息表明此错误仅在手动取消时发送
  • 所以我想说比较 error.code-999
  • 再次。如果被iOS系统取消了怎么办?
  • 那么你会得到一个不同的代码。

标签: ios nsurlconnection nsurlsession nsurlsessiontask


【解决方案1】:

将错误代码与 NSURLErrorCancelled 进行比较。仅当您的代码取消请求时才会生成此错误代码。

【讨论】:

  • 再次 - 文档中没有信息表明它是由我的代码发送的
  • 我多年前写了很多这些文档,所以这可能是我的错。 URL 加载系统不会,AFAIK,曾经取消请求。请求成功或失败。我知道只有三种方法可以获取该错误代码:通过在您的 didReceiveResponse 方法中使用 NSURLSessionResponseCancel 调用完成处理程序块,通过在任务上调用 cancel 方法,或者可能通过调用身份验证完成处理程序块NSURLSessionAuthChallengeCancelAuthenticationChallenge,我不确定最后一个。在所有三种情况下,您的代码都取消了。
【解决方案2】:

我找到了 3 个解决方案:

  • 子类任务/会话类

  • 通过在任务/会话类中调配方法创建自定义属性

  • 最简单但不是很漂亮的方法 - 任务具有字符串属性taskDescription,并且文档说开发人员可以随意使用它。

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 2018-11-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2017-06-04
    • 2021-04-04
    相关资源
    最近更新 更多