0

完成处理程序完成后如何返回数据?我试过这个方法,但它显示一个错误:

- (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;

    }];
}

在此处输入图像描述

4

1 回答 1

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
}
于 2013-11-21T20:12:36.350 回答