我正在将我的应用程序代码转移到MVC模型,所以我创建了一个方法来从API中检索一些数据。
+ (NSMutableArray *)loadFromFeed {
NSString *feed = @"https://api.test.com";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:feedUrl]];
request = [mutableRequest copy];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [JSONResponseSerializerWithData serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSArray *jsonArray = (NSArray *)[responseObject objectForKey:@"items"];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
CLS_LOG(@"Error");
}];
}现在,理想情况下,我希望返回jsonArray作为此方法的一部分。但是,由于AFHTTPRequestOperation是异步的,我不知道如何解决这个问题,并且仍然能够在应用程序中的任何地方调用[Data loadFromFeed];。我该怎么做?
发布于 2015-05-27 18:08:07
您可以将名为“成功和失败”的两个块传递给loadFromFeed,然后从setCompletionBlockWithSuccess成功和失败块调用两个块,将jsonArray传递到成功块:
typedef void (^Success)(id data);
typedef void (^Failure)(NSError *error);
- (void)loadFromFeed:(Success)success failure:(Failure)failure;
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSArray *jsonArray = (NSArray *)[responseObject objectForKey:@"items"];
success?success(jsonArray):nil;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure?failure(error):nil;
}];然后以这种方式使用:
[Data loadFromFeed:^(id data) {
NSLog(@"%@",data)
} failure:^(NSError *error) {
NSLog(@"%@",error)
}];];https://stackoverflow.com/questions/30489765
复制相似问题