【问题标题】:How do I support/add a completion handler to my asynchronous method? [duplicate]如何支持/向我的异步方法添加完成处理程序? [复制]
【发布时间】:2015-04-12 14:56:05
【问题描述】:

我正在关注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;

【问题讨论】:

  • 添加即可。有什么问题?
  • @matt 我真的不知道如何将它添加到 .h 和 .m 文件中。尤其是 .m 文件中。我需要为它编写一些代码吗?
  • 我再说一遍:有什么问题?完成处理程序是一个块,与您已经显示的代码完全相同。你不知道怎么办?
  • 您可以像您发布的代码一样输入它。有什么问题?
  • 在 iOS 中有很多你想要的方法。在问之前找到它。 Exp: + [UIView animateWithDuration:animations:]

标签: ios objective-c asynchronous completion


【解决方案1】:

@AdamPro13 为您提供了一个示例。

我的猜测是,您正在为如何定义一个将块作为参数的方法而苦苦挣扎。很混乱。

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

GoshDarnLinkSyntax

对你来说关键是这部分:

将块作为方法参数传递:

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

【讨论】:

  • 太好了。我正在尝试这个..但是我需要找到一些关于如何在上面函数中定义的块的完成处理程序中调用“blockName”的参考。
  • 调用块的语法与调用函数的语法相同:blockName(parameters),如果没有任何参数,则直接使用blockName()
【解决方案2】:

在您的.h 中声明它,如下所示:- (void)loadDataWithCompletion:(void(^)(id))completion;

然后您可以使用completion(data); 在该网络请求的完成处理程序中调用它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    相关资源
    最近更新 更多