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

Fat*_*tie 1 objective-c nserror ios nsurlsession

假设您正在使用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(); );
    }];
Run Code Online (Sandbox Code Playgroud)

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

-(void)cancelAnyCurrentBooksearch
  {
  [self.currentConnection cancel];
  self.currentConnection = nil;
  }
Run Code Online (Sandbox Code Playgroud)

然而,愚蠢地它仍然调用完成块非常烦人.

现在,这是取消的"文档":

/* -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;
Run Code Online (Sandbox Code Playgroud)

这是问题......

这到底是什么意思:

错误值{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(); );
    }];
Run Code Online (Sandbox Code Playgroud)

它确实"似乎有效" - 但当然很难知道.

那么,如何检查?

 * The task will signal -URLSession:task:didCompleteWithError: with an
 * error value of { NSURLErrorDomain, NSURLErrorCancelled }.
Run Code Online (Sandbox Code Playgroud)

文档中"花括号中的两个错误"是什么意思?

这是否意味着其中任何一种都可能发生?

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

Mat*_*son 5

错误值{NSURLErrorDomain,NSURLErrorCancelled}

你能在NSError中得到两个值吗?

是.这是一个对象.它有属性.如果您查看文档,您会发现它同时具有a domaincode属性.

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

if ([error.domain isEqualToString:NSURLErrorDomain] && 
    error.code == NSURLErrorCancelled)
Run Code Online (Sandbox Code Playgroud)

有关错误处理的完整详细信息,请参阅错误处理编程指南,包括域和代码.

话虽如此,我认为这是不可能的远程任何东西其他比NSURLErrorDomain将要与NSURLErrorCancelled的代码NSURLSession数据任务完成处理相关的,所以你应该罚款只是检查的你.