Как преждевременно отменить запрос в Restkit и вызвать «didfailwitherror»

StackOverflow https://stackoverflow.com/questions/8347846

  •  27-10-2019
  •  | 
  •  

Вопрос

Я использую RESTKIT В моем проекте «Цель-C» и необходимо указать тайм-аут для вызова моего сервиса около 10 секунд.

После прочтения, это не похоже на то, что Restkit поддерживает это, поэтому мой план состоит в том, чтобы:

  • Запустите таймер, когда мой запрос отправлен
  • Когда данные загружаются, отключите таймер

Вот моя проблема ...

Если метод таймера запускается, мне нужно отменить запрос и вызвать метод ниже вручную. Я не на 100% уверен, как это добиться.

Есть какой -то контекст в мой другой вопрос, показывая, как RESTKIT реализован в моем проекте и что он делает в этом случае.

Заранее большое спасибо за любую помощь, которую вы можете оказать мне в этом.

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { 
     NSLog(@"Hit error: %@", error); 
}
Это было полезно?

Решение

Вы можете использовать CancelRequestSwithDelegate: селектор для достижения описанного рабочего процесса.

- (void)cancelAfterTimeout {
    [[[[RKObjectManager sharedManager] client] requestQueue] cancelRequestsWithDelegate:self];
    NSError *myError = [[[NSError alloc] initWithDomain:NSPOSIXErrorDomain
            code:12345 userInfo:nil] autorelease];
    //feel free to customize the error code, domain and add userInfo when needed.
    [self handleRestKitError:myError];
}

Тем не менее, было бы сложно вызвать обработчик ошибок делегирования, но вы можете обойти его, создав новый отдельный обработчик ошибок, как это:

- (void)handleRestKitError:(NSError*)error {
    //do something with the error
}

и изменить тело вашего didFailWithError: Метод:

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { 
     [self handleRestKitError:error] 
}

Другие советы

В версии Restkit 0.20.x вы можете отменить запланированные запросы, используя

[[RKObjectManager sharedManager]
    cancelAllObjectRequestOperationsWithMethod:RKRequestMethodAny
                           matchingPathPattern:YOUR_PATTERN];

Вы всегда можете получить: [[RKObjectManager sharedManager].operationQueue cancelAllOperations]; Каждый из ваших запросов завершится ошибкой -999 (Операция отменена). Вы можете проверить код ошибки и выполнить соответствующее действие.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top