如何在 afnetworking 的 AFHTTPRequestOperationManager 请求中获取 return

how to get return in AFHTTPRequestOperationManager request in afnetworking

您好,我正在使用 AFHTTPRequestOperationManager class 从服务器获取响应但无法 return 数据发布数据。首先执行方法 return 然后成功数据即将到来我想获得 return 中的值。

这是我的代码
.h 文件

@interface ServerRequest : NSObject
{

}

-(NSString *) JsonData:(NSString *)newparams actionmethod:(NSString *)action parameters:(NSDictionary *)params;

.m

#import "ServerRequest.h"
#import "AFNetworking.h"

@implementation ServerRequest
{



}

-(NSDictionary *) getJsonData:(NSString *)anynewparams 
                 actionmethod:(NSString *)action 
                   parameters:(NSDictionary *)params {

    NSMutableDictionary *json = [[NSMutableDictionary alloc] init];

    NSString *url = @"http://gjkhdhdyi/ghdgd/Rest/";
    url = [url stringByAppendingString:action];

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];

    [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];

    manager.requestSerializer = requestSerializer;
    [manager 
    POST:weburl 
    parameters:params
    success:^(AFHTTPRequestOperation *operation, id responseObject) {

         NSLog(@"JSON: %@", responseObject);
         json=responseObject;
         // here i am getting data 

    }

    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"Error: %@", error);

    }];

    return json;    
}

现在我在我的 ViewController class 中调用这个方法,导入后我这样调用

ServerRequest *servercall=[[ServerRequest alloc]init];
returninfo=[servercall getJsonData:nil actionmethod:@"loginuser?" parameters:inputs]
// here i want return data.

这里的问题是没有return。但在方法中我得到了。那么如何在成功请求后获取 json 数据,如何做到这一点

您的请求方法使用块,不会立即执行,而是获取 dispatched/scheduled,因此请求完成之前的方法 returns(因此为 nil 值)您可以重构你使用 success/error 块的方法:

.h 文件

-(void)getJsonData:(NSString *)anynewparams 
  actionmethod:(NSString *)action 
    parameters:(NSDictionary *)params 
    onComplete:(void (^)(NSDictionary *json))successBlock 
       onError:(void (^)(NSError *error))errorBlock;

.m 文件

-(void)getJsonData:(NSString *)anynewparams 
      actionmethod:(NSString *)action 
        parameters:(NSDictionary *)params 
        onComplete:(void (^)(NSDictionary *json))successBlock 
           onError:(void (^)(NSError *error))errorBlock {

    NSString *url = @"http://gjkhdhdyi/ghdgd/Rest/";
    url = [url stringByAppendingString:action];

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];

    [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];

    manager.requestSerializer = requestSerializer;

    [manager POST:weburl parameters:params
    success:^(AFHTTPRequestOperation *operation, id responseObject) {

         NSLog(@"JSON: %@", responseObject);
         successBlock(responseObject);
     }

    failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"Error: %@", error);
         errorBlock(error);
     }];
}

然后:

ServerRequest *servercall=[[ServerRequest alloc] init];
[servercall getJsonData:nil actionmethod:@"loginuser?" parameters:inputs onComplete:^(NSDictionary *json) {

    // return json ehre
} onError:^(NSError *error) {

    // handle error here
}];

你也可以这样试试-

.h 文件

- (NSDictionary *) getJsonData:(NSString *)anynewparams actionmethod:(NSString *)action parameters:(NSDictionary *)params onComplete:(void (^)(NSDictionary *json))successBlock
              onError:(void (^)(NSError *error))errorBlock;

.m 文件

-(NSDictionary *) getJsonData:(NSString *)anynewparams actionmethod: (NSString *)action parameters:(NSDictionary *)params
                onComplete:(void (^)(NSDictionary *json))successBlock
                   onError:(void (^)(NSError *error))errorBlock{
__block id json;

NSString *url = @"http://gjkhdhdyi/ghdgd/Rest/";
url = [url stringByAppendingString:action];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];

[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = requestSerializer;

[manager POST:url parameters:params
      success:^(AFHTTPRequestOperation *operation, id responseObject)
 {
     successBlock(responseObject);
 }
 failure:
 ^(AFHTTPRequestOperation *operation, NSError *error){
     NSLog(@"Error: %@", error);
 }];
return json;
}

在ViewController中调用此方法class

-(void)call_LoginWebService{
 returninfo=[[NSDictionary alloc]init];

BaseRequest *basecall=[[BaseRequest alloc]init];
[basecall getJsonData:nil actionmethod:@"LoginUser?" parameters:inputs onComplete:^(NSDictionary *json) {

    NSLog(@"alll data here  ==%@",json);
    returninfo = json;

} onError:^(NSError *error) {
    // handle error here
}];
}