【问题标题】:dataTaskWithURL doco, what does: error value of { NSURLErrorDomain, NSURLErrorCancelled } mean?dataTaskWithURL doco,{ NSURLErrorDomain, NSURLErrorCancelled } 的错误值是什么意思?
【发布时间】:2014-08-01 12:00:36
【问题描述】:

假设你正在使用 NSURLSession dataTaskWithURL: ...

self.currentConnection =
  [sess dataTaskWithURL:goUrl
  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
    {
    [self.results addObjectsFromArray: [self yourDataConversionCode:data] ];

    dispatch_async(dispatch_get_main_queue(), ^{  if (after) after(); );
    }];

当然,如果可能需要取消它。 (例如,用户更改了搜索词或类似问题。)这很容易...

-(void)cancelAnyCurrentBooksearch
  {
  [self.currentConnection cancel];
  self.currentConnection = nil;
  }

然而,愚蠢的它仍然调用完成块,这很烦人。

现在,这里是取消的“文档”:

/* -cancel returns immediately, but marks a task as being canceled.
 * The task will signal -URLSession:task:didCompleteWithError: with an
 * error value of { NSURLErrorDomain, NSURLErrorCancelled }.
 */
- (void)cancel;

问题来了……

这是什么意思:

错误值 { NSURLErrorDomain, NSURLErrorCancelled }

你能在一个 NSError 中有两个值吗??

如果是这样,我如何检查 NSError 是否完全正确

" { NSURLErrorDomain, NSURLErrorCancelled } "

这意味着什么?

请注意,如果您这样做:

self.currentConnection =
  [sess dataTaskWithURL:goUrl
  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
    {
    if( [error code] == NSURLErrorCancelled )
      {
      NSLog(@"  seemed to be CANCELLED programmatically?");
      return;
      }

    [self.results addObjectsFromArray: [self yourDataConversionCode:data] ];

    dispatch_async(dispatch_get_main_queue(), ^{  if (after) after(); );
    }];

它“似乎有效”——但当然很难知道。

那么,如何检查呢?

 * The task will signal -URLSession:task:didCompleteWithError: with an
 * error value of { NSURLErrorDomain, NSURLErrorCancelled }.

文档中的“大括号中的两个错误”是什么意思?

这是否意味着任何一个都可能发生?

我不知道如何确定这里的答案,它没有记录。

【问题讨论】:

  • 投反对票的人真是愚蠢至极。这个网站上的反对票变得荒谬了。如果一个问题是高度技术性的,人们就会投反对票,因为他们无法正确阅读并且不理解它。真是荒谬!
  • 投了赞成票,因为那些无缘无故投反对票的人惹恼了我,可能不喜欢你丰富多彩的语言。
  • 谢谢瑞恩 - 新年快乐 :)

标签: ios objective-c nsurlsession nserror


【解决方案1】:

错误值 { NSURLErrorDomain, NSURLErrorCancelled }

你能在一个 NSError 中有两个值吗??

是的。它是一个对象。它有属性。如果您检查the documentation,您会发现它同时具有domaincode 属性。

如果您想同时检查两者,您可以按照您的预期进行:

if ([error.domain isEqualToString:NSURLErrorDomain] && 
    error.code == NSURLErrorCancelled)

请参阅Error Handling Programming Guide 了解有关错误处理的完整详细信息,包括域和代码。

话虽如此,我认为除了 NSURLErrorDomain 之外的任何其他内容都不太可能与带有 NSURLErrorCancelled 代码的 NSURLSession 数据任务完成处理程序相关联,因此您只需检查一下就可以了像你一样。

【讨论】:

  • 啊!太棒了,马特!我只是没有想到它是一个域。他们怪异的 { } 语法是怎么回事? (它具有三个属性 - 它是伪结构语法还是什么?!)再次感谢!!!
  • 妈的——马特,你意识到 .domain 是一个 NSString !直到现在我才知道。
  • 因为 error.domain 是一个 NSString,我们应该使用 if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) 来代替。
  • @huntert 好点!当我回答这个问题时,我显然做了太多的斯威夫特。固定。
  • 有没有可能得到这个错误代码'NSURLErrorCancelled',除了我们通过'[task cancel];'取消任务?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2012-11-26
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多