AFNetworking에서 failure에서 error 상태 코드 캡처

2280 단어
AFNetworking을 이용하여 네트워크 요청을 보낼 때 요청이 실패할 때 일반적으로 출력되는 error는 긴 줄로 되어 있어 그의 오류 코드와 구체적으로 기술된 오류 정보를 꺼내기 어렵다. 그러면 우리는 요청 성공 데이터와 실패할 때 업무 논리를 통일적으로 처리할 수 없다. 흔히 볼 수 있는 요청 요구 사항은 계정 세션 만료 문제이다. 만약에 우리가 만료된 세션을 가지고 데이터 인터페이스에 접근한다면흔히failure에서 403 오류를 제시합니다. 이렇게 하면sucess에서 이 문제의 해결 방안을 통일할 수 없습니다. 사실은 간단합니다. [AFJSONRequestSerializer serializer] 이 방법의 실현을 차단하고 우리가 원하는 데이터를 error에 기록해야 합니다.

1. AFJSON ResponseSerializer 상속 부류 재작성 방법 클래스명 AFResponseSerializer WithData

static NSString * const ResponseSerializerStatusKey = @"statusCode";
static NSString * const ResponseSerializerDataKey = @"body";
- (id)responseObjectForResponse:(NSURLResponse *)response data:(NSData *)data error:(NSError *__autoreleasing  _Nullable *)error{
    id JSONObject = [super responseObjectForResponse:response data:data error:error];
    if (*error != nil) {
        NSMutableDictionary *userInfo = [(*error).userInfo mutableCopy];
        [userInfo setValue:[NSJSONSerialization JSONObjectWithData:data options:0 error:nil] forKey:ResponseSerializerDataKey];
        [userInfo setValue:[response valueForKey:ResponseSerializerStatusKey] forKey:ResponseSerializerStatusKey];
        NSError *newError = [NSError errorWithDomain:(*error).domain code:(*error).code userInfo:userInfo];
        (*error) = newError;
    }
    return JSONObject;
}


2. 응답 데이터 분석 형식 설정

AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
mgr.requestSerializer = [AFJSONRequestSerializer serializer];
mgr.responseSerializer = [AFResponseSerializerWithData serializer];

3. 상태 코드 및 오류 데이터 정보 데이터 가져오기

[self.mgr GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
}];

failure에서 int statusCode = [error.userInfo[@"statusCode"] intValue]NSDictionary *body = error.userInfo[@"body"]를 통해 statusCodebody 데이터를 얻을 수 있습니다
이렇게 하면 우리는 이 통일된 논리를 쉽게 처리할 수 있다. AFNetworking에 한 층을 봉인하고 데이터와 응답 오류 상태 코드를 되돌려주면 우리가 통일된 오류 알림을 할 수 있다.

좋은 웹페이지 즐겨찾기