dataTaskWithURL doco,做什么:{NSURLErrorDomain,NSURLErrorCancelled}的错误值是什么意思?

时间:2014-08-01 12:00:37

标签: ios objective-c nsurlsession nserror

假设您正在使用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 }.

“花括号中的两个错误”在文档中意味着什么?

这是否意味着 可能会发生?

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

1 个答案:

答案 0 :(得分:5)

  

错误值{NSURLErrorDomain,NSURLErrorCancelled}

     

你在NSError中有两个值吗?

是。这是一个对象。它有属性。如果您选中the documentation,则会发现它同时包含domaincode属性。

如果你想同时检查两者,你可以按照预期的那样做:

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

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

话虽如此,我认为除了NSURLErrorDomain之外的所有其他将与NSURLErrorCancelled代码的NSURLSession数据任务完成处理程序相关联,这是不可能的,所以你应该没关系,只需检查一下就像你一样。