Как преждевременно отменить запрос в Restkit и вызвать «didfailwitherror»
-
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 (Операция отменена). Вы можете проверить код ошибки и выполнить соответствующее действие.