我有一个视图控制器,它将发出服务器请求。我已将所有服务器请求处理程序放在一个类中。所以在视图控制器中,只需使用[Apihandler getlist]来获取列表。
在班级Apihandler中,我在
中使用了块[_request setCompletionBlock:^{}]
获取服务器响应(JSON对象)。
如果JSON对象包含名为“error”的键/值,我会将其视为失败,尽管它已完成ASIHttpRequest本身。否则就会成功。
问题是:如何获得上述完成块的返回值?我检查了ASI文档,ASIBasicBlock是void返回类型。
答案 0 :(得分:2)
我是和代表一起做的。所以我的代码看起来像这样:
[request setCompletionBlock:^{
NSLog(@"Data retrieved");
NSData *data = [request responseData];
NSLog(@"Status Code: %d", [request responseStatusCode]);
dispatch_async(backgroundQueue, ^(void){
[self processData:data];
});
}];
这基本上说当这个完成块运行时,在后台调用processData消息。在processData消息中,我使用委托将数据返回到我的主UI线程。该消息如下所示:
- (void)processData:(NSData *)data {
NSError *error = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
dispatch_async(dispatch_get_main_queue(), ^(void){
[self.delegate requestDataReady:json];
});
}
我希望有所帮助。
更新:
当然,您不必在后台线程中运行process方法。您可以轻松地在块中调用[self processData:data],甚至可以将processData中的代码放在块中。