dataTaskWithURL doco, какво означава: стойност на грешка на {NSURLErrorDomain, NSURLErrorCancelled} означава?

Да кажем, че използвате 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 }.

Какво означава "две грешки във фигурни скоби" в документацията?

Означава ли, че някое от тях може да се случи?

Нямам представа как човек може да определи отговора тук със сигурност, той е недокументиран.


person Fattie    schedule 01.08.2014    source източник
comment
Който и да е гласувал против това, е невероятно глупав. Гласуването против в този сайт просто става абсурдно. Стига се дотам, че ако даден въпрос е силно технически, хората просто го отхвърлят, защото не могат да четат правилно и не го разбират. Направо е абсурдно!   -  person Fattie    schedule 01.08.2014
comment
Гласувах за, защото хората, които гласуват против без основателна причина, ме дразнят, вероятно не са харесали колоритния ви език.   -  person Ryan Heitner    schedule 28.12.2014
comment
ХЕХ благодаря Райън - честита нова година :)   -  person Fattie    schedule 02.01.2015


Отговори (1)


Стойност на грешка на {NSURLErrorDomain, NSURLErrorCancelled}

Можете ли да имате ДВЕ стойности в NSError??

да Това е обект. Има свойства. Ако проверите документацията, ще откриете, че има както domain, така и code свойство.

Ако искате да проверите и двете, ще го направите, както може да очаквате:

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

Вижте Ръководство за програмиране за обработка на грешки за пълни подробности за обработката на грешки, включително домейни и кодове.

Като казах това, мисля, че е малко вероятно нещо различно освен NSURLErrorDomain да бъде свързано с манипулатор за изпълнение на задача за данни NSURLSession с кода на NSURLErrorCancelled, така че трябва да сте добре, просто проверявайки това, както сте .

person Matt Gibson    schedule 01.08.2014
comment
Ах! Брилянтно, Мат! Просто не ми хрумна, че е домейн. Какво им е странният { } синтаксис? (Има три свойства - трябва ли да бъде синтаксис на псевдо структура или нещо подобно?!) Благодаря отново!!! - person Fattie; 01.08.2014
comment
Мамка му -- Мат, разбра ли, че .domain е NSString !! Не знаех това до сега. - person Fattie; 03.08.2014
comment
Тъй като error.domain е NSString, вместо това трябва да използваме if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled). - person huntert; 25.02.2015
comment
@huntert Добро мнение! Явно бях работил твърде много със Swift, когато отговорих на това. Фиксирана. - person Matt Gibson; 25.02.2015
comment
Има ли някаква възможност за получаване на този код за грешка „NSURLErrorCancelled“, освен да анулираме задачата чрез „[task cancel];“ ? - person Vineeth; 03.03.2016