return 来自 AFHTTPRequestOperation 的数据?

return data from AFHTTPRequestOperation?

我正在将我的应用程序代码移动到 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");
    }];
}

现在,理想情况下,我想 return jsonArray 作为此方法的一部分。但是,由于 AFHTTPRequestOperation 是异步的,我不知道如何解决这个问题并且仍然可以在应用程序的任何地方调用 [Data loadFromFeed]; 。我该怎么做?

你可以将两个名为 success 和 failure 的块传递给 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)
}];];