У меня есть данные «JSON» с разными кодами состояния, как показано на изображении, я использую «AFHTTPSessionManager», и если мы вызываем API, я получаю 200 как код успеха, кроме того, что в моем объекте ответа у меня есть коды статуса Поэтому я хочу, чтобы выполнять различные операции на основе кодов состояния, для этого я написал такой код ..Как добавить код состояния к ошибке?
-(void)validateOTP:(NSString *)OTP andUserID:(NSString *)userID withCompletion:(void(^)(NSDictionary* dictionary, NSError* error))completion
{
UTValidateOTPRequest *request = [UTValidateOTPRequest validateOTPRequestWithOTP:OTP andUserID:userID];
NSDictionary *paramDict = [request dictionaryRepresentation];
NSURLSessionDataTask *task = [self postRequestToResouce:[NSString stringWithFormat:@"%@/ValidateOTP",kServerCommonEndPoint] arguments:paramDict successHandler:^(NSDictionary *response) {
NSNumber *statusCode = response[kStatusCodeKey];
if (statusCode.integerValue == UTStatusCodeSuccess) {
completion(response, nil);
}
else {
NSError *error = [NSError mapStatusCodeToError:statusCode.integerValue details:response];
completion(nil, error);
}
} errorHandler:^(NSError *error) {
NSError *newError = [NSError mapStatusCodeToError:error.code details:error.userInfo];
completion(nil, newError);
}];
[self addDataTask:task];
}
Как вы можете видеть, даже внутри обработчика успеха я передаю ошибки и вызов категории метод, который мы создали.
NSError *error = [NSError mapStatusCodeToError:statusCode.integerValue details:response];
Этот метод реализуется следующим образом
+ (NSError *)mapStatusCodeToError: (NSInteger)statusCode details:(NSDictionary*) errorInfo
{
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
NSString *domain = [bundleIdentifier stringByAppendingString:kErrorDomainKey];
NSString *errorMessage = nil;
if (errorInfo[kErrorMessageKey] && ![errorInfo[kErrorMessageKey] isEqualToString:kEmptyString]) {
errorMessage = errorInfo[kErrorMessageKey];
}
else{
// use common message
errorMessage = kInternetNotAvailableMessage;
}
NSDictionary *userInfo = @{NSLocalizedDescriptionKey:NSLocalizedString(errorMessage, nil)};
NSLog(@"User INFO : %@",userInfo);
NSError *internetUnavailableError = [NSError errorWithDomain:domain
code:NSURLErrorNotConnectedToInternet
userInfo:userInfo];
NSLog(@"Error Code : %ld",(long)internetUnavailableError.code);
return internetUnavailableError;
}
Здесь я хочу использовать StatusCode, что я прохожу в качестве параметра этого метода, так что я могу получить этот код статуса, когда я звоню это метод
[[UTServerManager sharedInstance] validateOTP:self.enterOTPText.text andUserID:self.userId withCompletion:^(NSDictionary *dictionary, NSError *error) {
// Here I want to get the status code of error not like -1009 , but what ever statusCode that I'm getting from the API response.
}];
Таким образом, в этом методе я могу получить код состояния ответа, если это не успех кода означает, как вы видите на картинке в первом ответ успех и остальные являются ответами об ошибках.
И я знаю, что я могу использовать statusCode в методе категории, но я не знаю, как его использовать. Если я сохраню этот код состояния в методе категории для ошибки, как указано выше, то я передаю как параметр к методам, то я могу назвать их там, где мне нужно. Как получить это ?
И мое ограничение - это только эти методы, но я должен добавить код состояния ответа в ошибку ??