我正在编写一个使用 Web 服务来获取一些 JSON 数据的应用程序,我需要从我的不同视图控制器的 Web 服务中获取不同的数据。所以我想创建一个类来处理这个问题,目的是在将来发布它。
在我的课程中,我想利用AFNetworking
框架来AFJSONRequestOperation
从 Web 服务获取 JSON 数据,但这会异步返回数据,因此不像仅在类方法上返回数据那么简单。
如何让我的班级处理这些数据并将其传递回调用班级?在传回数据时,我是否必须像往常一样使用委托,还是有其他方法?
+(NSDictionary*)fetchDataFromWebService:(NSString *)query{
NSURL *url = [NSURL URLWithString:query];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"Success");
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Fail");
}];
[operation start];
return ??? // I can't return anything here because AFJSONRequestOperation is completed Async
}
所以我应该这样做,并使用委托
+(void)fetchDataFromWebService:(NSString *)query{
NSURL *url = [NSURL URLWithString:query];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"Success");
[self.delegate didFinishFetchingJSON:(NSDictionary*)json];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Fail");
[self.delegate didFinishFetchingJSON:(NSDictionary*)json withError:(NSError*)error];
}];
[operation start];
}
任何有关使用异步调用创建此类类的最佳方式和最佳实践的帮助都会非常有帮助。
提前谢谢了