从服务器请求信息的方法中的完成处理程序

时间:2015-05-11 12:52:07

标签: ios objective-c callback objective-c-blocks

我有一个向服务器发送请求的方法,我用completionHandler创建了对该函数的调用,如下所示:

-(void)sendAddSubscriptionRequest:(NSString*)owner withComppletionHandler:(void (^)(BOOL, NSArray *, NSError *))completion
   dataWebService = [[NSMutableData alloc] init];
    NSURL* aUrl = [NSURL
                   URLWithString:[NSString stringWithFormat:@"https://www.google.com/add?"]];

    NSMutableURLRequest* request =
    [NSMutableURLRequest requestWithURL:aUrl
                            cachePolicy:NSURLRequestUseProtocolCachePolicy
                        timeoutInterval:30.0];        
    [request addValue:[NSString stringWithFormat:@"Bearer %@", "token"]
   forHTTPHeaderField:@"Authorization"];

    [request setHTTPMethod:@"POST"];
    NSString* postData =
    [[NSString alloc] initWithFormat:@"owner=%@",
     owner];
    [request setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]];        
    NSData* returnData = [NSURLConnection sendAsynchronousRequest:request queue:nil completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

    };

我的问题是如何在获取数据后将完成处理程序返回给我的函数。

谢谢,

1 个答案:

答案 0 :(得分:0)

当您发送异步请求时,该方法将立即返回,因为数据将在NSURLConnection完成处理程序中“返回”。然后,您可以在那里对其进行解码并将其传递给您自己的完成处理程序:

[NSURLConnection sendAsynchronousRequest:request
                                   queue:nil
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    NSArray *array = nil;
    if (!connectionError)
        array = /* get from data somehow */
    completion(!connectionError, array, connectionError);
}];

注意:目前尚不清楚完成处理程序参数的含义,所以我可能已经采取了一些自由。