我在我的应用程序中创建了一个 APIController,它有几个方法可以调用特定的 api url,并返回一个用 api 调用结果填充的模型对象。
该 API 使用 json,到目前为止我的代码如下所示:
//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
}];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)