首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从AFHTTPRequestOperation返回数据?

从AFHTTPRequestOperation返回数据?
EN

Stack Overflow用户
提问于 2015-05-27 17:53:47
回答 1查看 80关注 0票数 0

我正在将我的应用程序代码转移到MVC模型,所以我创建了一个方法来从API中检索一些数据。

代码语言:javascript
复制
+ (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];。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-27 18:08:07

您可以将名为“成功和失败”的两个块传递给loadFromFeed,然后从setCompletionBlockWithSuccess成功和失败块调用两个块,将jsonArray传递到成功块:

代码语言:javascript
复制
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;
}];

然后以这种方式使用:

代码语言:javascript
复制
[Data loadFromFeed:^(id data) {
    NSLog(@"%@",data)
} failure:^(NSError *error) {
    NSLog(@"%@",error)
}];];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30489765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档