在便捷方法中包装基于API的块

时间:2014-06-16 22:31:11

标签: objective-c objective-c-blocks afnetworking-2

我使用AFNetworking 2.0访问网络API(虽然这也适用于NSURLSession),目前我有一堆看起来像这样的代码:

[self.rottenTomatoesManager GET:@"movies.json" parameters:@{@"q" : searchString, @"apikey" : [self.rottenTomatoesManager apiKey]}
                                success:^(NSURLSessionDataTask *task, id responseObject) {
                                    NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
                                    if(response.statusCode == 200){
                                        NSDictionary *responseData = responseObject;
                                        self.searchResults = responseData[@"movies"];
                                        [self.searchDisplayController.searchResultsTableView reloadData];
                                        [self.tableView reloadData];
                                    }
        }
                                failure:^(NSURLSessionDataTask *task, NSError *error) {
                                    NSLog(@"Error loading movies %@", error.localizedDescription);
        }];

我想采用这种功能并将其包装在一个看起来像这样的便利方法中

NSArray *results = [self.rottenTomatoesManager searchMoviesWithTitle:@"The avengers"]

清理ViewController代码并使大多数代码框架不可知。

执行此操作的最佳方法是什么,以便我不会将基于异步块的基于API的API转换为同步API?

1 个答案:

答案 0 :(得分:0)

回调块对此非常有用。

[self loadSomethingWithCallback:^(NSArray *results) {
    NSLog(@"%@", results);
}];