returnAsynchronousRequest和completionHandler in return方法

时间:2013-11-21 20:01:13

标签: xcode methods nsurlconnection sendasynchronousrequest completionhandler

如何在completionHandler完成后返回数据?我尝试了这种方法,但它显示错误:

- (NSData *)ReturnDataFromUrl{

    NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]];

    [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

        return data;

    }];
}

enter image description here

1 个答案:

答案 0 :(得分:4)

当您说return data;时,您实际上是在尝试将data返回到完成块的调用者 - 这不起作用。

由于您使用的是异步方法,因此无法将块中收到的数据返回给您启动网络操作的方法。当调用该块中的代码时,系统执行时间很长那种方法。

您需要做的是设置一个委托系统 - 如果这是一个帮助类,您可以添加一个包含didFinishLoadingStuff:(NSData *)stuff等方法的协议。

然后你会改变

 - (NSData *)ReturnDataFromURL{...}

类似

- (void)getDataFromUrlWithDelegate:(NSObject<StuffGetterProtocol> *)delegate{...}

而不是return data;,你会说:

[delegate didFinishLoadingStuff:data];

当然,在您调用它的任何类中实现委托方法:

- (void)didFinishLoadingStuff:(NSData *)stuff
{
    //do something with stuff
}