如何在异步方法中支持/添加完成处理程序?

时间:2015-02-12 01:43:39

标签: ios objective-c asynchronous completion

我正在关注this answer来测试我在类中定义的异步方法。但是我无法为它添加完成处理程序定义。有什么帮助吗?

我得到了一个定义如下的方法:

//.h
- (void)loadData;

//.m   
 - (void)loadData{
        NSString *urlString =
    [NSString stringWithFormat:@"www.example.com/json", kResultsLimit ];
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

                           }
    }];

我现在想在loadData方法定义中添加一个完成处理程序..如何在.h和.m文件中添加它?

.h:

的例子
        - (void)loadData+completionhandler;

2 个答案:

答案 0 :(得分:3)

@ AdamPro13为您提供了如何操作的示例。

我的猜测是,你正在努力解决如何定义一个以块为参数的方法。这令人困惑。

我使用此站点(使用较少的SFW URL名称)来确定在不同情况下使用块的语法:

GoshDarnLinkSyntax

关键是这一部分:

将块作为方法参数传递:

- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;

答案 1 :(得分:1)

在您的.h中声明它:- (void)loadDataWithCompletion:(void(^)(id))completion;

然后,您可以使用completion(data);

在该网络请求的完成处理程序中调用它