2016-01-22 40 views
2

我正在使用AFNetworking 3.0,我無法獲取成功或失敗的狀態代碼。AFNetworking 3.0狀態代碼

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager GET:[NSString stringWithFormat:@"%@%@",BASE_URL,url] parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) { 
        // TODO: show progress somewhere 
       } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
        NSLog(@"%@",responseObject); 
        // get status here 
       } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

        // get status here 
       }]; 

回答

1

希望這有助於!

typedef enum RequestTypes{ 

GET, 
POST, 
PUT, 
DELETE 

}RequestType; 

@property (nonatomic, strong) AFHTTPSessionManager *manager;  

self.manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:urlString]]; // Base URL here, not entire URL 
self.manager.requestSerializer = [AFJSONRequestSerializer serializer]; 


//Add Headers to request if any. // header is a dictionary of key value pair. 
for (NSString *key in [headers allKeys]) { 
    [self.manager.requestSerializer setValue:[headers valueForKey:key] forHTTPHeaderField:key]; 
} 

/* Serialize request by type */ /* Type can be GET, POST etc */ 

NSString *requestTypeMethod = [self getStringForRequestType:type]; 

/* enter your URL here excluding base url */ 

NSMutableURLRequest *request = [self.manager.requestSerializer requestWithMethod:requestTypeMethod URLString:[[NSURL URLWithString:urlString relativeToURL:_manager.baseURL] absoluteString] parameters:params error:nil]; 

NSURLSessionDataTask *dataTask = [self.manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { 

// here you will get actual response, NSURL response as well and error if any.  

}]; 

[dataTask resume]; 


#pragma mark - GET Request type as string 
-(NSString *)getStringForRequestType:(RequestType)type { 

NSString *requestTypeString; 

switch (type) { 
    case GET: 
     requestTypeString = @"GET"; 
     break; 

    case POST: 
     requestTypeString = @"POST"; 
     break; 

    case PUT: 
     requestTypeString = @"PUT"; 
     break; 

    case DELETE: 
     requestTypeString = @"DELETE"; 
     break; 

    default: 
     requestTypeString = @"GET"; 
     break; 
} 

    return requestTypeString; 
} 
0

你必須使用AFURLSessionManager的方法來獲得NSURLResponse對象 這樣。由於AFHTTPSessionManager是AFURLSessionManager的子類,它爲網絡調用提供了方便的方法。通過使用AFURLSessionManager調用,比如dataTaskWithRequestdownloadTaskWithRequest任何方法

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 

,你會得到NSURLResponse對象,並從,你可以得到的狀態代碼,成功或失敗。

+0

我是位新的,所以你可以指導我怎麼能發送GET和POST請求呢? – Misha

+0

請參考我更新的答案!請接受和upvote,如果它可以幫助你。 – iOSEnthusiatic

1

這是工作代碼:

[afHttpSessionManager GET:@"blablabla/bla" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
    // success 
} failure:^(NSURLSessionTask *operation, NSError *error) { 
    // failure 
    NSHTTPURLResponse *response = (NSHTTPURLResponse *) [operation response]; 
    NSInteger statusCode = [response statusCode]; 
    NSLog(@"RESPONSE CODE: %i", statusCode); 
}];