總結點1: 在處理所有請求到服務器的API類(AFHTTPSessionManager子類)中添加下面的方法代碼。 API調用---
- (void)getMyRecordsFromServer:(NSString *)url withLastModified:(NSTimeInterval)lastModified callbackHandler:(void (^)(id, NSError *))handler {
self.requestSerializer = [AFHTTPRequestSerializer serializer];
self.responseSerializer = [AFHTTPResponseSerializer serializer];
[self GET:url parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
handler(responseObject, nil);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
/**********************************************************************/
NSHTTPURLResponse *response = error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey];
NSInteger statusCode = response.statusCode;
NSLog(@"Error Code=%ld",(long)statusCode);
NSLog(@"Desc=%@",response.description);
/**********************************************************************/
[self baseFailureWithError:error onFailure:handler];
}];
}
成功調用----
- (void)myGetRequestWithSuccess:(void (^)(id))success
onFailure:(void (^)(NSError *))failure
{
[self GET:@"api/object"
parameters:nil
success:^(NSURLSessionDataTask *task, id responseObject)
{
// success code here.
} failure:^(NSURLSessionDataTask *task, NSError *error)
{
[[self class] baseFailureWithError:error onFailure:failure];
}];
}
後實現通用邏輯baseFailureWithError ::類的方法,然後給回電話給你的看法控制器來實現用戶特定的錯誤驗證。 失敗呼叫----
- (void)baseFailureWithError:(NSError *)error
onFailure:(void(^)(id responseObject,NSError *error))failure
{
if (failure){
NSHTTPURLResponse *response = error.userInfo[@"AFNetworkingOperationFailingURLResponseErrorKey"];
if ([response isKindOfClass:[NSHTTPURLResponse class]] && response.statusCode == 401){
NSLog(@"Handle all 401's!");
// decide show alert or not for point 2
} else {
failure(nil, error);
}
}
}
感謝答案,所以我的理解,如果我們從服務器的一些失敗響應,我們應該處理它失敗的方法。我知道我們只需要成功使用成功方法,並且不能處理HTTP狀態代碼,因爲我知道我們需要從服務器接收到的進程自定義錯誤的故障塊。所以實際上,如果服務器向我發送了一些響應 - 「你的Alex帳戶使用的數據庫中沒有統計數據」,我猜這裏沒有HTTP狀態碼=)我應該在哪裏處理它?這肯定是後端問題。 –
此響應的狀態碼可能爲200.而且是更後端的問題。我有類似的任務,我正在處理的幫助下。成功案例,因爲請求狀態是200.並且在成功案例中,我正在檢查響應是否包含以json提交的自定義錯誤。 –
是的,那我問了什麼,所以我的問題是將自定義錯誤的邏輯處理成功或錯誤塊的最佳方式。因爲那樣我可以要求後端開發人員生成成功消息而不是錯誤,實際上最佳實踐是我最初的問題。 –