从CompletationBlock中提取args

时间:2014-05-20 09:38:24

标签: ios block extract

我已经定义了一个名为CompletionHandlerBlock

的类型
typedef void (^CompletionHandlerBlock)(NSURLResponse *response, NSData *data, NSError *error);

这是针对方法:

NSURL *url = [NSURL URLWithString:@"http://www.youtube.com"];

NSURLRequest *urlRequest2 = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest2 queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
    NSLog(@"completed");
}
];

我想使用va_start和va_arg函数动态检测completation块(completionHandler)中传递的args的值。

我试过了:

CompletionHandlerBlock obj2 = va_arg(*argp,CompletionHandlerBlock);
//now obj2 contains the CompletionHandler block object
va_list argp2;
va_start(argp2, obj2);
for(id obj = obj2; obj; obj = va_arg(argp2, id)) {
     NSLog(@"obj:%@",obj);
}
va_end(argp2);

但没有成功。 重点是获取NSResponse,NSData和NSError对象。

由于

1 个答案:

答案 0 :(得分:1)

除了在具有可变数量的参数的函数或方法或块中,您不能使用va_arg,即使用...作为最后一个参数声明的参数。所以无论你想做什么,它都无法奏效。

另一方面,非常不清楚你实际上想要实现的是什么。响应,数据和错误已经是完成块的参数。您应该编写您尝试使用的完整代码,而不仅仅是没有任何上下文的代码片段。