Objective c AFHTTPRequestOperationManager在块中返回数据
我在我的应用程序中创建了一个APIController,它有几个方法调用特定的api URL并返回一个填充了api调用结果的模型对象 api使用json,到目前为止,我的代码如下所示:Objective c AFHTTPRequestOperationManager在块中返回数据,objective-c,afnetworking,objective-c-blocks,afnetworking-2,afhttprequestoperation,Objective C,Afnetworking,Objective C Blocks,Afnetworking 2,Afhttprequestoperation,我在我的应用程序中创建了一个APIController,它有几个方法调用特定的api URL并返回一个填充了api调用结果的模型对象 api使用json,到目前为止,我的代码如下所示: //Definition: - (MyModel *)callXYZ; - (MyModel *)callABC; - (MyModel *)call123; //Implementation of one: - (MyModel *)callXYZ { //Build url and call wi
//Definition:
- (MyModel *)callXYZ;
- (MyModel *)callABC;
- (MyModel *)call123;
//Implementation of one:
- (MyModel *)callXYZ {
//Build url and call with [NSData dataWithContentsOfURL: url];
//Create model and assign data returned by api
return model;
}
现在我想使用伟大的AFNetworking框架来摆脱“dataWithContentsOfURL”调用。所以我改变了我的方法:
- (MyModel *)callXYZ {
__block MyModel *m;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//process data and assign to model m
}
return m;
}
此代码不起作用,因为在url调用完成之前返回了空模型。我被卡住了,不知道如何重构我的设计来让它工作
//编辑:我不知道知道这是否重要,但我稍后想在调用api时显示加载动画
- (void)callXYZWithCompletion:(void (^)(MyModel *model))completion {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
MyModel *m;
//process data and assign to model m
if(completion) {
completion(m);
}
}
}
用法示例:
// Start the animation
[self callXYZWithCompletion:^(MyModel *model) {
// Stop the animation
// and use returned model here
}];
模型的接收与http请求异步进行。由于该方法立即返回一个结果,它当然不会等待服务器的响应。这就是为什么你应该将模型返回到完成块的原因。谢谢!这正是我想要的。