我如何 support/add 我的异步方法的完成处理程序?

How do I support/add a completion handler to my asynchronous method?

我正在关注 this answer 以测试我在 class 中定义的异步方法。但是我无法向其添加完成处理程序定义。有帮助吗?

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

//.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;

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

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

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

@AdamPro13 给你一个如何做的例子。

我的猜测是您正在为如何定义一个将块作为参数的方法而苦恼。令人困惑。

我使用这个站点(名称较少的 SFW URL)来弄清楚在不同情况下使用块的语法:

GoshDarnLinkSyntax

你的关键是这部分:

将块作为方法参数传递:

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