如何在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;
}];
}
答案 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
}