Как преждевременно отменить запрос в RestKit и вызвать 'didFailWithError'
Я использую RestKit в моем проекте Objective-C и должен указать время ожидания для моего обслуживания около 10 секунд.
После прочтения это выглядит не так, как RestKit поддерживает это, поэтому мой план состоит в следующем:
- Запустите таймер при отправке моего запроса.
- Когда данные загружаются, отключите таймер
Здесь моя проблема...
Если срабатывает метод таймера, мне нужно отменить запрос и вызвать метод ниже вручную. Я не уверен на 100%, как добиться этого.
Есть какой-то контекст в моем другом вопросе, показывающий, как RestKit реализуется в моем проекте и что он делает в этом случае.
Большое спасибо заранее за любую помощь, которую вы можете дать мне на этом.
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
NSLog(@"Hit error: %@", error);
}
Ответы
Ответ 1
Вы можете использовать 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]
}
Ответ 2
В RestKit версии 0.20.x вы можете отменить запланированные запросы, используя
[[RKObjectManager sharedManager]
cancelAllObjectRequestOperationsWithMethod:RKRequestMethodAny
matchingPathPattern:YOUR_PATTERN];
Ответ 3
Вы всегда можете:
[[RKObjectManager sharedManager].operationQueue cancelAllOperations];
Каждый из ваших запросов завершится с ошибкой -999 (операция отменена). Вы можете проверить код ошибки и выполнить соответствующее действие.